django if括号中的括号

时间:2014-12-15 15:03:14

标签: python django templates django-templates django-views

如何在Django模板中干净利落地完成这项工作?基本上如果是A,或者(B和C),我想展示一些HTML。

我基本上有这个:

{%if user.is_admin或something.enable_thing and user.can_do_the_thing%}

现在,这有点暧昧。我试着做了

{%if user.is_admin或(something.enable_thing and user.can_do_thething)%}

但你不允许括号。文档说使用嵌套ifs(或者在这种情况下是elifs,我猜,因为它是一个OR),但我不想在块内重复相同的HTML,这听起来很糟糕。

2 个答案:

答案 0 :(得分:14)

正如Mihai Zamfir评论的那样它应该按预期工作。正如Django文档所述:

允许在同一标记中使用以及子句,具有更高优先级比例如:

{%if athlete_list and coach_list or cheerleader_list%}

将被解释为:

if(athlete_list和coach_list)或cheerleader_list

答案 1 :(得分:7)

您可以在视图中进行检查,并将标记传递给上下文。

show_html = user.is_admin or (something.enable_thing and user.can_do_the_thing)
context['show_html'] = show_html

然后在你的模板中你可以检查标志

{% if show_html %}