【问题标题】:Django if statement doesn't work as expectedDjango if 语句没有按预期工作
【发布时间】:2013-02-21 18:31:20
【问题描述】:

我的 html 文件中有以下内容:

{% trans "Result: "%} {{result}} 

这将在浏览器上打印出单词 SUCCESS(因为那是字符串包含的内容)

但如果我执行以下操作:

{% if result == 'SUCCESS' %}
   do something
{% else %} 
   do something else
{% endif %}

我发现 if 语句没有按预期工作。

这是为什么呢??

【问题讨论】:

  • repr(result) == "'SUCCESS'"(例如,不是不同的类型,没有空格)?
  • 类似问题已经回答here

标签: python django


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    检查此链接: Django String format。 根据 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 %}
    

    由于您的变量类型而发生此问题,您应该在将其与另一个字符串进行比较之前将其更改为字符串。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 2017-06-18
      • 2022-11-26
      • 2020-07-26
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多