Django - 有没有办法在模板中创建一个变量?
我想这样做:Django - 有没有办法在模板中创建一个变量?
{% for egg in eggs %}
<p>{{ egg.spam }}</p>
{% if egg.is_cool %}
{% myvariable = egg %} // Possible in any way?
{% endif %}
{% endfor %}
赦免JavaScript的风格注释(它显示为上SO评论)
欢迎来到Django模板。
这个问题很容易用DjangoSnippets.com发布的最早片段之一解决:Expr tag。
人们会争论了一整天关于逻辑从模板中分离,但忽略了有业务逻辑,其所属的模型或意见,表示逻辑属于只有在模板 。如果您有很多演示逻辑,您可能需要考虑对部分或全部模板使用Jinja2。警告:尽管Jinja2 看起来像Django的模板语言,但它与Custom Template Tags之类的东西不兼容。
我想你会得到最接近的是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 %}
),或者在将其传递给视图之前确定特殊项目。希望有所帮助。
基本上,创建变量的原因是在循环之外使用它。 'with'标签本身就是一个循环。我稍后需要在页面中访问'myvariable'。 – orokusaki 2010-06-04 17:04:12
我认为这可能是最好的做这种检查并设置行为的观点,而不是模板。如果有的话,它会给你更好的控制缓存,如果/当你需要它。
这样做的问题是我需要这样做在我所有的观点。 – orokusaki 2010-06-04 17:12:25
如果您确实需要在所有视图中执行此操作,则可以创建一个装饰器或一些中间件来封装您所需的任何逻辑。 – 2010-06-04 17:16:07
谢谢彼得。我一直在考虑使用猎豹,但从来没有真正考虑过使用金嘉。我认为原因是我目前使用Velocity,但现在我习惯于使用Django模板的风格和语法,Jinja可能是一个很好的补充。 – orokusaki 2010-06-06 20:55:36