Django中的if语句工作不如预期
我在我的html文件里有以下内容:
{% trans "Result: "%} {{result}}
这段代码会在浏览器上显示出“SUCCESS”这个词(因为字符串里就是这个内容)
但是如果我这样做:
{% if result == 'SUCCESS' %}
do something
{% else %}
do something else
{% endif %}
我发现这个if语句没有按我预期的那样工作。
这是为什么呢??
2 个回答
1
查看这个链接:Django 字符串格式。根据 Django 的文档,你应该使用这样的格式:
{% if result|stringformat:"s" == 'SUCCESS' %}
do something
{% else %}
do something else
{% endif %}
或者
{% if result|stringformat:"s" in 'SUCCESS' %}
do something
{% else %}
do something else
{% endif %}
或者
{% ifequal result|stringformat:"s" 'SUCCESS' %}
do something
{% else %}
do something else
{% endif %}
这个问题发生是因为你的变量类型不对,你应该在和另一个字符串比较之前,把它转换成字符串。
3
这个 if
语句是没问题的。你的问题可能出在字符串上。也许它根本就不是一个字符串。
你可以试试 ifequal
这个模板标签:
{% ifequal result 'SUCCESS' %}
do something
{% else %}
do something else
{% endifequal %}
你可以尝试不同的方法。如果你在视图中给 result
赋值,可以在同一个视图里验证它是否是一个字符串:
def my_view(request):
# ... processing ...
result = something()
# Let's make sure it's a string containing 'SUCCESS'
assert type(result) == str
assert result == 'SUCCESS'
如果是上下文处理器,你也可以用同样的逻辑。 https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#ifequal