2012-08-08 44 views
0

我有一个变量,我需要改变模板内。Python/Django - 如何更改模板内的变量?

比方说变量foo4,但我需要的值是foo + 1

我然后在if语句中使用这个,像这样:如果你保持逻辑的观点,而不是在模板

{% if bar == foo+1 %} 
<p>Condition has been met!</p> 
{% endif %} 
+4

你可以通过写一个templatetag做但你真的不想这样做。 Django的模板设计有意限制,因为它们鼓励将逻辑放置在视图中。 – super9 2012-08-08 13:10:56

+0

你能告诉你你想完成什么?也许我们可以建议一个更优雅的方式 – DataGreed 2012-08-08 13:17:08

+0

@ super9,但我同意这种观点,有时候不寻常的布局需要稍微复杂的模板逻辑(多列等):这与视图无关 - 它是显示逻辑和因此应该留在模板(imo) – 2012-08-08 13:19:43

回答

5

你可以做

{% 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%} 
+0

我接受这个答案的基础上,你觉得你真的需要更改模板中的变量的情况。然而,正如super9在上面的评论中所建议的那样,最好先在视图中尝试这样做。 – shrewdbeans 2012-08-10 10:38:22

+0

@Owen同意,逻辑不应放在模板中,视图就是这样。 – Rohan 2012-08-10 11:01:58

4

您的代码将更加透明和“djangoic”。因此,不要在模板中计算foo+1,而要传递模板布尔变量foo_equals_bar,或将其传递给变量barfoo_incremented,然后比较这些变量。

看看如何更可读,它是:

{% if foo_equals_bar %} 
<p>Condition has been met!</p> 
{% endif %} 
0
{% with foo|add:"1" as foo1 %} 
{% if foo1 == bar %} 
<p>....</p> 
{% endif %} 
{% endwith %} 
+1

所以(道德上)错了,但如此(技术上)是正确的... – JosefAssad 2012-08-08 13:14:18