簡體   English   中英

帶有邏輯括號和優先順序的 Django 模板 IF 條件

[英]Django template IF condition with logical breckets and precedence order

在我的 Django 模板中,我有

{% if object_not_readonly and user_is_worker or user_is_admin %}

Django 醫生告訴我

允許在同一個標​​簽中同時使用 and 和 or 子句,並且優先級高於 or

我認為這不是在 IF 子句中聲明邏輯優先級的明顯方式。

問題是

是不是類似於 django 模板語言中的{% if object_not_readonly and ( user_is_worker or user_is_admin ) %}條件,帶有明顯的子句,例如if A and (C or B) and (not Z)

目前尚不清楚您在這里問什么,或者您試圖通過示例語句實現什么結果:

{% if object_not_readonly and user_is_worker or user_is_admin %}

為了通過“允許在同一標記中同時使用 and 和 or 子句,並且優先級高於 or”來闡明它們在參考文檔中的含義,上述語句將被評估為:

{% if (object_not_readonly and user_is_worker) or user_is_admin %}

這與{% if object_not_readonly and ( user_is_worker or user_is_admin ) %}

為了絕對安全,我會這樣拆分:

{% if object_not_readonly %} 
    {% if user_is_worker or user_is_admin %}

        ...

    {% endif %}
{% endif %}

根據文檔,如果您無法使用默認優先級解決問題,則必須使用嵌套 if。 正如亞當已經提到的:

{% if object_not_readonly %} 
   {% if user_is_worker or user_is_admin %}

    ...

   {% endif %}
{% endif %}

https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#std-templatetag-if

在 if 標記中使用實際括號是無效的語法。 如果您需要它們來指示優先級,則應使用嵌套的 if 標記。 我希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM