Python 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

我正在寻找清理django中模板的方法。一个简单的解决方案是将其分解为多个模板,但我们不希望这样做

我们基本上有以下几点

{%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%}
您还可以在下面查看更多详细信息:


祝你好运!我认为这是一个好主意……祝你好运……正如Django最初的创建者所说,他们删除了一些编程功能,这样非程序员——也就是设计师——可以继续工作。最好的例子是不包括elif标记。@Edwin他们刚刚添加了:)@Mandx Cool!不过,我没有让Django通过主干,所以我仍然没有它。一旦你上线,我不想让你处理下面的任何事情。。。如果你有,你不需要做一个如果其他。。。你可以加入一些伪代码来展示你在说什么。忽略我不想有多个模板的事实,+1,因为这是一种方法。我不想把它分成多个模板,因为这将在其他几个地方发生,但也许我需要重新思考我们是如何做到的。谢谢。他也可以试试尼斯提供的一个“elif”标签,我不知道有人写了一个片段来添加
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 %}