如果模板中的标签与上下文中传递的布尔值不匹配

时间:2012-07-13 01:04:32

标签: django django-templates

我有一个观点login()

from django.http import HttpRequest
from useraccounts.models import BadIP
def login(request):
    client_address = request.META['REMOTE_ADDR']
    client_instance = BadIP.objects.get(ip_address=client_address)
    if client_instance.ban_state == True:
        return render(request, 'login.html', {'banned':True})
    else:
        return render(request, 'login.html', {'banned':False})

一个模板:

{% if banned == False %}
  <p>Content</p>
{% endif %}

{% if banned == True %}
  <p>Content #2</p>
{% endif %}

根据这些标准,两个段落都不会在模板中呈现。但是,如果我将TrueFalse出现的代码中的实例更改为字符串,则突然模板呈现正常。为什么会发生这种情况,是否有任何方法可以将此行为更改为更明显/语义正确?

1 个答案:

答案 0 :(得分:1)

它们已经是布尔变量了!无需与他们TrueFalse进行比较。试试这个:

{% if banned %}
    <p>Content</p>
{% else %}
    <p>Content #2</p>
{% end if %}