web-dev-qa-db-ja.com

Django ifステートメントの括弧

Djangoテンプレートでこれをきれいに行うにはどうすればよいですか?基本的にA、または(BとC)の場合、HTMLを表示したいと思います。

私は基本的にこれを持っています:

{%if user.is_adminまたはsomething.enable_thingおよびuser.can_do_the_thing%}

さて、それは少し曖昧です。やってみた

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

ただし、許可されている括弧はありません。ドキュメントでは、ネストされたif(またはこの場合はelif、ORとして)を使用すると言われていますが、2ifブロック内で同じHTMLを繰り返したくないので恐ろしいようです。

21
user49411

ミハイ・ザムフィールがコメントしたように、それは期待通りに機能するはずです。 Djangoドキュメントに記載されているように:

同じタグ内でandおよびor句の両方を使用でき、andよりも(= /// =)高い優先順位を持つまたは例:

_{% if athlete_list and coach_list or cheerleader_list %}_

次のように解釈されます:

if (athlete_list and coach_list) or cheerleader_list

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

15
Sven

ビューでチェックを実行し、コンテキストにフラグを渡すことができます。

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

次に、テンプレートでフラグを確認できます

{% if show_html %}

8
dm03514