2010-06-04 88 views

回答

2

欢迎来到Django模板。

这个问题很容易用DjangoSnippets.com发布的最早片段之一解决:Expr tag

人们会争论了一整天关于逻辑从模板中分离,但忽略了有业务逻辑,其所属的模型或意见,表示逻辑属于只有在模板 。如果您有很多演示逻辑,您可能需要考虑对部分或全部模板使用Jinja2。警告:尽管Jinja2 看起来像Django的模板语言,但它与Custom Template Tags之类的东西不兼容。

+0

谢谢彼得。我一直在考虑使用猎豹,但从来没有真正考虑过使用金嘉。我认为原因是我目前使用Velocity,但现在我习惯于使用Django模板的风格和语法,Jinja可能是一个很好的补充。 – orokusaki 2010-06-06 20:55:36

3

我想你会得到最接近的是with标签:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#with

如果你说想拥有在模板中的项目,我可以想像,做这样的事情:

<div class="special"> 
{% with some_list.first as special_item %} 
    {{ specialitem }} 
{% endwith %} 
</div> 

<div class="everything"> 
{% for item in some_list %} 
    {{ item }} 
{% endfor %} 
</div> 

如果你想要一些特殊的逻辑,以确定哪一个是特殊的项目,我想向对象添加一个方法(所以最后得到:上面的{% with some_collection.my_method as special_item %}),或者在将其传递给视图之前确定特殊项目。希望有所帮助。

+0

基本上,创建变量的原因是在循环之外使用它。 'with'标签本身就是一个循环。我稍后需要在页面中访问'myvariable'。 – orokusaki 2010-06-04 17:04:12

1

是的,你可以使用with结构:

{% with myvariable as egg %} 
do stuf 
{% endwith %} 
+0

唯一的问题是:'仅在{%with%}和{%endwith%}标记之间存在填充变量(在上例中,总数)。“ – orokusaki 2010-06-04 17:08:08

1

我认为这可能是最好的做这种检查并设置行为的观点,而不是模板。如果有的话,它会给你更好的控制缓存,如果/当你需要它。

+0

这样做的问题是我需要这样做在我所有的观点。 – orokusaki 2010-06-04 17:12:25

+1

如果您确实需要在所有视图中执行此操作,则可以创建一个装饰器或一些中间件来封装您所需的任何逻辑。 – 2010-06-04 17:16:07