【问题标题】:Incorrect work of if-else statement in Django templateDjango 模板中 if-else 语句的错误工作
【发布时间】:2013-05-08 02:16:23
【问题描述】:

我有这个代码:

{% if username_is_ok == True %}
    <input type="text" name="inputName" placeholder="Name" required>
{% else %}
    <div class="control-group error">
        <input type="text" name="inputName" placeholder="Name" value="{{ username }}"
               class="text-error" required>
        <span class="help-block text-error">User already exists</span>
    </div>
{% endif %}

调试器说username_is_ok == True 等于{bool} True。但它转到else 分支,当页面加载时我看到错误消息。我看不到任何错误,我对此感到沮丧。你能帮助我吗?谢谢。

【问题讨论】:

  • 尝试使用{% if username_is_ok %}
  • 我添加了== True 以再次检查username_is_ok 的值,所以这不是解决方案。
  • 你检查username_is_ok 是否等于True??
  • @nnaelle 他说他在他的问题中做到了。
  • 哦,我以为他只是检查了它是否是布尔值。那我不好。无论如何,我都会检查视图,以防万一。对不起,我误解了

标签: python django django-templates


【解决方案1】:

Django 模板语言不是 Python,而是它自己的具有最少逻辑的自定义“模板语言”(这是设计使然:鼓励您将“控制器”逻辑远离模板)。因此,你会发现一些有效的 Python 可能不是有效的模板语法

在您的示例中,模板语言尝试将“True”评估为文字。由于您可能没有在上下文中定义名为“True”的键,因此会引发 VariableDoesNotExist 异常,并且模板将该值视为 python None 类型。

调试器将条件评估为 Python,而不是 Django 模板语言,因此该值针对 Python True 进行测试并评估为 True

为了使逻辑起作用,您可能想尝试将True 添加到您的模板上下文中。比如:{"True": True}

相关:https://stackoverflow.com/a/5672415/927229

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-23
    • 2013-03-26
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2018-08-30
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多