在Django模板中的for循环内进行布尔检查

时间:2015-07-06 22:28:33

标签: django django-models django-forms django-templates django-views

在Django模板中,我有以下for循环

 {% for document in documents %}
      <li><a href="{{ document.docfile.url }}">{{ document.docfile.name }}</a></li>
 {% endfor %}

通过这个循环,我向用户显示我的应用程序的所有上传文件。

现在说我想向用户显示他/她上传的文件。

我在变量{{ request.user }}中有当前用户 我还有用户在{{ document.who_upload }}

中进行了第i次上传

我的问题是如何在循环中比较这两个变量,以仅显示当前用户具有who_upload字段的上传?

例如,我尝试了语法

{% if {{ request.user }} == {{ document.who_upload }} %}
{% endif %}

但它似乎不起作用。

此检查的正确语法是什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

这应该完成工作:

{% if request.user.username == document.who_upload.username %}
{% endif %}

但是你应该考虑在你的视图中执行这个逻辑。这假设您没有在其他任何地方循环遍历整个查询集。

views.py
========
from django.shortcuts import render

from .models import Document

def documents(request):
    queryset = Document.objects.filter(who_upload=request.user)

    return render(request, 'document_list.html', {
        'documents': queryset
    })

答案 1 :(得分:0)

更好的选择是比较用户的主键,而不是比较用户对象,这肯定会有所不同。

{% if request.user.pk == document.who_upload.pk %}
    <span>You uploaded this file</span>
{% endif %}