django template if condition
got开发者_如何学编程 a question here.
I have the following
{% if form.tpl.yes_no_required == True %}
<!-- path 1 -->
{% else %}
{% if form.tpl.yes_no_required == False %}
<!-- path 2 -->
{% endif %}
{% endif %}
The value for form.tpl.yes_no_required is None, but I was routed to path 2. Can anyone please explain why is this so? EDIT: if the value is none, i do not want it display anything.
You can't use the template language to test against what you think are constants, the parser is actually testing 2 "literals".
The parser tests for 2 literals with names 'None' and 'False'. When parser tries to resolve these in the context a VariableDoesNotExist exception is thrown and both objects resolve to the python value None and None == None.
from django.template import Context, Template
t = Template("{% if None == False %} not what you think {% endif %}")
c = Context({"foo": foo() })
prints u' not what you think '
c = Context({'None':None})
t.render(c)
prints u' not what you think '
c = Context({'None':None, 'False':False})
t.render(c)
prints u''
None != False None != True also ... do some things like this for none item
{% if form.tpl.yes_no_required %}
<!-- path 1 -->
{% else %}
{% if not form.tpl.yes_no_required %}
<!-- path 2 -->
{% endif %}
{% endif %}
精彩评论