Python Django模板-停止处理模板
我正在寻找清理django中模板的方法。一个简单的解决方案是将其分解为多个模板,但我们不希望这样做 我们基本上有以下几点Python Django模板-停止处理模板,python,django,Python,Django,我正在寻找清理django中模板的方法。一个简单的解决方案是将其分解为多个模板,但我们不希望这样做 我们基本上有以下几点 {%if data.some_state %} Display some markup {% else %} {%if data.some_state_2 %} State 2 different html view {% else %} {%if data.process_data %} Displa
{%if data.some_state %}
Display some markup
{% else %}
{%if data.some_state_2 %}
State 2 different html view
{% else %}
{%if data.process_data %}
Display some list of data
{% else %}
No Data to display!
{% endif %} <!-- if data.process_data-->
{% endif %} <!-- if data.some_state_2 -->
{% endif %} <!-- if data.some_state -->
您可以使用它作为该视图(或整个项目)的模板,它支持if
/elif
/else
分支:
{% if data.some_state %}
Display some markup
{% elif data.some_state_2 %}
State 2 different view
{% elif data.process_data %}
Display some list of data
{% endif %}
在django项目中,有两个不同的包可以很容易地使用jinja2,我使用了这两个包。我不确定停止处理模板逻辑会做什么;但是一种更简洁的方法是编写一个自定义标记,该标记接受您的参数,然后只返回与变量相关的HTML。通过这种方式,您可以删除
if/else
循环,并用一个简单的{%do\u stuff%}
标记替换所有循环
编辑
这是一个非常简单的实现,可以让您了解逻辑的运行方式
首先,为每个变体创建模板,并将它们存储在django可以找到的地方
然后,一个简单的标记呈现您想要的确切模板(这是未测试的,psuedo):
最后,在模板中:
{% load my_tags %}
{% process_data data.mymodel %}
虽然我认为这种方法更好,但您也可以通过使用自定义标记来完成您想做的事情,该标记将上下文变量设置为布尔值,而最外层的部分也可以转换为if标记
#Set a context variable nodata to True
{% setnodata True %}
{%if data.some_state %}
Display some markup
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{%if data.some_state_2 %}
State 2 different view
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{%if data.process_data %}
Display some list of data
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{% if nodata %}
No data provided !
{ % endif %}
setnodata
自定义标记只是根据参数将上下文变量nodata
设置为True或False。今天我遇到了同样的问题。
我发现这个标签{%verbatim%}{%endverbatim%},它在Django1.5中工作+
例如:
{% verbatim %}
<div class="entry">
<h1>{{ title }}</h1>
<div class="body">
{{ body }}
</div>
</div>
{% endverbatim %}
{%verbatim%}
{{title}}
{{body}}
{%endverbatim%}
您还可以在下面查看更多详细信息:
elif
标签。{%elif%}
标签是给django的。
#Set a context variable nodata to True
{% setnodata True %}
{%if data.some_state %}
Display some markup
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{%if data.some_state_2 %}
State 2 different view
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{%if data.process_data %}
Display some list of data
#Set context variable nodata to False
{% setnodata False %}
{% endif %}
{% if nodata %}
No data provided !
{ % endif %}
{% verbatim %}
<div class="entry">
<h1>{{ title }}</h1>
<div class="body">
{{ body }}
</div>
</div>
{% endverbatim %}