2013-07-07 140 views
2

我創建了一個應該支持獨立渲染和ajax渲染的jinja2模板。 模板的樣子:將jinja2塊渲染爲json

{% if is_ajax %}{% extends 'ajax.html' %}{% else %}{% extends 'site.html' %}{% endif %} 
{% block title %}The Title{% endblock %} 
{% block body %}The body{% endblock %} 

site.html工作正常,但我沒能創造ajax.html將呈現標題和正文塊作爲JSON。我試過類似的東西:

{ 
    "copy":"{% block body %}Default Body{% endblock %}", 
    "title":"{% block title %}Default Title{% endblock %}", 
} 

但是,這當然不會將塊轉換爲json。

我也嘗試過使用Template.blocks來創建使用python的json,但是這種方法需要每個塊的手動渲染,這並不像是正確的方式。

這可能嗎?

+1

我不會使用模板來生成JSON,而不是當'json'模塊會做得更好時,它也會更好地處理引用。 –

+0

我同意,也試過這個,但這意味着我不得不手動渲染這些塊,並且實際上重新實現了一部分忍者。它的工作原理,但必須有更好的方法。 – Tzach

回答

2

使用self.block_name()指令解決。 dumps實際上是傳入模板的'json.dumps'。

{ 
    "copy" : {{ dumps(self.copy()) | safe }}, 
    "title" : {{ dumps(self.title()) | safe }} 
} 
+0

所以這是'ajax.html'? – luckydonald