django模板if或statement

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django模板if或statement相关的知识,希望对你有一定的参考价值。

基本上要快速简单,我希望在django模板中运行XOR条件。在你问我为什么不在代码中执行此操作之前,这不是一个选项。

基本上我需要检查用户是否在两个多对多对象之一。

req.accepted.all 

req.declined.all

现在他们只能在一个或另一个(因此XOR条件)。从浏览文档来看,我唯一可以理解的是以下内容

{% if user.username in req.accepted.all or req.declined.all %}

我在这里遇到的问题是,如果user.username确实出现在req.accepted.all中,那么它会转义条件,但如果它在req.declined.all中,那么它将遵循条件子句。

我在这里错过了什么吗?

答案

and的优先级高于or,因此你可以编写分解版本:

{% if user.username in req.accepted.all and user.username not in req.declined.all or
      user.username not in req.accepted.all and user.username in req.declined.all %}

为了提高效率,使用with跳过重新评估查询集:

{% with accepted=req.accepted.all declined=req.declined.all username=user.username %}
    {% if username in accepted and username not in declined or
          username not in accepted and username in declined %}
    ...
{% endif %}
{% endwith %}
另一答案

从被接受的人那里重新回答:

要得到:

{% if A xor B %}

做:

{% if A and not B or B and not A %}

有用!

以上是关于django模板if或statement的主要内容,如果未能解决你的问题,请参考以下文章

相当于使用if .. else作为Django模板语言中的表达式

如何在 Django 中显式重置模板片段缓存?

使用 Django 模板作为片段

JavaScript 片段在 Django 模板中不起作用

Eclipse 中的通用代码片段或模板

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?