为什么django模板中的else标签不起作用

时间:2018-02-13 06:02:40

标签: python html5 django-models

所以我有很多很多领域。在模板中,我想验证当前用户是否存在于manytomany字段中并分别显示输出

model.py

  class Business(models.Model):
      businessname=models.CharField(max_length=230,null=True)
      creator==models.ForeignKey(User,unique=True)
      users=models.ManyToManyField(Users,null=True,related-name="shared")

在我的veiw.py

def Display(request):
    BusinessObjects = Business.objects.all()
    template="template.html"
    return render(request,template,context={'objects':BusinessObjects})

template.html

<div class="allobjects">
 {% for obj in objects %}
 {{obj.businessname}}
 <!-- verify if the  current login user exist in the many to many field-->
 {% for currentuser in obj.users %}
  {% if user.username in currentuser.username %}
   <p> You are sharing this object</p>
  {% else %}
  <p> You are not sharing this object

 {% endif %}
 {% endfor %}
 {% endfor %}
</div>

尽管用户名不存在,但我的else语句不起作用。但是如果用户名存在,则第一条语句执行。我在if语句中做错了什么以及为什么我的else语句不能正常工作。谢谢。请不要降级我的问题是否对你不重要。

2 个答案:

答案 0 :(得分:0)

根据Django的文档,空值解析为“无”而不是导致错误。因此,可能两个值都无法解决:https://docs.djangoproject.com/en/2.0/ref/templates/language/

{% if user.username in currentuser.username %}

如果它们都是空的,则应该解析为真。

修改 这里的实际问题是你使用“in”作为比较运算符而不是“==”。如果缺少用户名,则检查给定字符串中是否包含空字符串(它是 - 有点像0元素是任何元素集的子集)。

如果要过滤掉空字符串,可以使用长度标记。来自docs

length¶
Returns the length of the value. This works for both strings and lists.

For example:

{{ value|length }}
If value is ['a', 'b', 'c', 'd'] or "abcd", the output will be 4.

The filter returns 0 for an undefined variable.

{% if user.username|length > 0 %}

答案 1 :(得分:0)

{% if not user in obj.users.all%}
 {% else %}
 {% endif %}