我有一个变量,我需要改变模板内。Python/Django - 如何更改模板内的变量?
比方说变量foo
是4
,但我需要的值是foo + 1
。
我然后在if
语句中使用这个,像这样:如果你保持逻辑的观点,而不是在模板
{% if bar == foo+1 %}
<p>Condition has been met!</p>
{% endif %}
我有一个变量,我需要改变模板内。Python/Django - 如何更改模板内的变量?
比方说变量foo
是4
,但我需要的值是foo + 1
。
我然后在if
语句中使用这个,像这样:如果你保持逻辑的观点,而不是在模板
{% if bar == foo+1 %}
<p>Condition has been met!</p>
{% endif %}
你可以做
{% if bar == foo|add:1 %}
<p>Condition has been met!</p>
{% endif %}
或那样:
{%with newfoo=foo|add:1 %}
{% if bar == newfoo %}
<p>Condition has been met!</p>
{% endif %}
{%endwith%}
我接受这个答案的基础上,你觉得你真的需要更改模板中的变量的情况。然而,正如super9在上面的评论中所建议的那样,最好先在视图中尝试这样做。 – shrewdbeans 2012-08-10 10:38:22
@Owen同意,逻辑不应放在模板中,视图就是这样。 – Rohan 2012-08-10 11:01:58
您的代码将更加透明和“djangoic”。因此,不要在模板中计算foo+1
,而要传递模板布尔变量foo_equals_bar
,或将其传递给变量bar
和foo_incremented
,然后比较这些变量。
看看如何更可读,它是:
{% if foo_equals_bar %}
<p>Condition has been met!</p>
{% endif %}
{% with foo|add:"1" as foo1 %}
{% if foo1 == bar %}
<p>....</p>
{% endif %}
{% endwith %}
所以(道德上)错了,但如此(技术上)是正确的... – JosefAssad 2012-08-08 13:14:18
你可以通过写一个templatetag做但你真的不想这样做。 Django的模板设计有意限制,因为它们鼓励将逻辑放置在视图中。 – super9 2012-08-08 13:10:56
你能告诉你你想完成什么?也许我们可以建议一个更优雅的方式 – DataGreed 2012-08-08 13:17:08
@ super9,但我同意这种观点,有时候不寻常的布局需要稍微复杂的模板逻辑(多列等):这与视图无关 - 它是显示逻辑和因此应该留在模板(imo) – 2012-08-08 13:19:43