Django中的if语句工作不如预期

2 投票
2 回答
1391 浏览
提问于 2025-04-17 16:40

我在我的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

撰写回答