django if括号中的括号

use*_*411 21 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,这听起来很糟糕.

Sve*_*ven 15

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

两者的用途同一标签内的条款将被允许,并且较高的比优先级例如:

{%if athlete_list和coach_list或cheerleader_list%}

将被解释为:

if(athlete_list和coach_list)或cheerleader_list


dm0*_*514 8

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

show_html = user.is_admin or (something.enable_thing and user.can_do_the_thing)
context['show_html'] = show_html
Run Code Online (Sandbox Code Playgroud)

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

{% if show_html %}

  • 我不会将此逻辑放入视图中,而是使用自定义标记 (2认同)
  • 如果这些变量之一需要是循环迭代变量怎么办?django对此感到失望。 (2认同)