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

Django-有没有办法在模板中创建变量?,django,django-templates,Django,Django Templates,我想这样做: {% for egg in eggs %} <p>{{ egg.spam }}</p> {% if egg.is_cool %} {% myvariable = egg %} // Possible in any way? {% endif %} {% endfor %} 请原谅JavaScript风格的注释,它显示为注释,因此我认为最接近的是with标记: 如果您想在模板中添加一个项目,我可以想象这样做: <

我想这样做:

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

请原谅JavaScript风格的注释,它显示为注释,因此我认为最接近的是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标签:

如果您想在模板中添加一个项目,我可以想象这样做:

<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 as egg %}
do stuf
{% endwith %}
是的,您可以使用构造:

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

我认为最好在视图中进行此类测试并设置行为,而不是在模板中。如果需要的话,它可以让您在需要时更好地控制缓存。

我认为最好在视图中进行此类测试并设置行为,而不是在模板中。如果需要的话,它可以让您在需要时更好地控制缓存。

欢迎使用Django模板

使用最早发布到djangosippets.com的代码片段之一,这个问题就很容易解决了:the


人们可以整天争论逻辑与模板的分离,但这忽略了业务逻辑(属于模型或视图)和表示逻辑(仅属于模板)。如果你有很多的演示逻辑,你可能想考虑使用一些或所有的模板。警告:尽管Jinja2看起来很像Django的模板语言,但与以下内容不兼容。

欢迎使用Django模板

使用最早发布到djangosippets.com的代码片段之一,这个问题就很容易解决了:the


人们可以整天争论逻辑与模板的分离,但这忽略了业务逻辑(属于模型或视图)和表示逻辑(仅属于模板)。如果你有很多的演示逻辑,你可能想考虑使用一些或所有的模板。警告:尽管Jinja2看起来很像Django的模板语言,但与以下内容不兼容。

基本上,创建变量的原因是在循环之外使用它。with标记本身就是一个循环。我需要稍后在页面中访问myvariable。基本上,创建变量的原因是在循环之外使用它。with标记本身就是一个循环。我需要稍后在页面中访问myvariable。唯一的问题是:上面示例中填充的变量total仅在{%with%}和{%endwith%}标记之间可用。唯一的问题是:上面示例中填充的变量total仅在{%with%}和{%endwith%}标记之间可用标记。这样做的问题是,我需要在所有视图中执行此操作。如果确实需要在所有视图中执行此操作,则可以创建一个装饰器或一些中间件来封装所需的逻辑。执行此操作的问题是,我需要在所有视图中执行此操作。如果确实需要在所有视图中执行此操作您可以创建一个装饰器或一些中间件来封装您需要的任何逻辑。谢谢Peter。我一直在考虑使用猎豹,但从未真正想过使用金甲。我认为原因是我目前使用的是Velocity,但现在我已经习惯了使用Django模板的样式和语法,Jinja可能是一个很好的补充。谢谢Peter。我一直在考虑使用猎豹,但从未真正想过使用金甲。我认为原因是我目前使用的是Velocity,但现在我已经习惯了使用Django模板的样式和语法,Jinja可能是一个很好的补充。