[Django]-Parentheses in django if statement

19👍

As Mihai Zamfir commented it should work as expected. As Django documentation mentions:

Use of both and and or clauses within the same tag is allowed, with and having higher precedence than or e.g.:

{% if athlete_list and coach_list or cheerleader_list %}

will be interpreted like:

if (athlete_list and coach_list) or cheerleader_list

https://docs.djangoproject.com/en/2.2/ref/templates/builtins/#boolean-operators

👤Sven

10👍

you could do the check in your view and pass a flag to the context.

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

Then in your template you could check the flag

{% if show_html %}

0👍

If you have the case like you said: A or (B and C), then Sven’s answer would work appropriately because the and would automatically have higher precedence according to the documentation.

However, if you wish to do something like (A or B) and C, then you could instead create and use custom template filters.

NOTE: Filters can only take at most two arguments, so they will only be useful if say, for example, you are comparing multiple attributes from 1 or 2 objects.

👤Chris

Leave a comment