Django - 有没有办法在模板中创建变量?

时间:2010-06-04 16:58:19

标签: django django-templates

我想这样做:

{% for egg in eggs %}
    <p>{{ egg.spam }}</p>
    {% if egg.is_cool %}
        {% myvariable = egg %} // Possible in any way?
    {% endif %}
{% endfor %}

请原谅JavaScript风格的评论(它显示为对SO的评论)

4 个答案:

答案 0 :(得分: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 %})或者在传递给它之前确定特殊项目风景。希望有所帮助。

答案 1 :(得分:2)

欢迎使用Django模板。

这个问题可以通过发布到DjangoSnippets.com的最早的片段之一轻松解决:Expr tag

人们可以整天争论逻辑与模板的分离,但忽略了存在业务逻辑,它属于模型或视图,以及表示逻辑在模板中仅属于 。如果您有很多演示逻辑,您可能需要考虑对部分或全部模板使用Jinja2。警告:虽然Jinja2 看起来很像Django的模板语言,但与Custom Template Tags之类的内容不兼容。

答案 2 :(得分:1)

是的,您可以使用with构造:

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

答案 3 :(得分:1)

我认为最好在视图中进行这种测试和设置行为,而不是模板。如果有的话,它会让你在需要的时候更好地控制缓存。