我的django模板布尔变量在javascript中没有按预期工作

时间:2012-09-12 20:13:57

标签: javascript django templates

以下是我的base.html标题中的代码

    <script>
        var auth_status = "{{ user.is_authenticated }}"
    </script>

    {% block scripts %}  {% endblock %}

我网站上的其他脚本都在块脚本中。

在子模板中(在脚本块内和脚本标记内)我有这段代码,

         if (auth_status) {
          //something
         }

当前的错误是auth_status始终为True,当它应该打开和关闭时,具体取决于用户是否已登录.Request_context正在传递给模板,因此不应该是错误。

由于

2 个答案:

答案 0 :(得分:72)

我看到你的auth_status变量似乎是一个字符串,而不是一个布尔值。 javascript上具有非空字符串的变量将在true子句上评估为if

无论如何,像

<script>
    var auth_status = {{ user.is_authenticated }};
</script>

将无效,因为这将生成此HTML:

<script>
    var auth_status = True;
</script>

因为Python的True布尔值是大写的。

这应该从Python到Javascript的转换:

<script>
    var auth_status = {{ user.is_authenticated|yesno:"true,false" }};
</script>

在此处检查yesno docs:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#yesno

答案 1 :(得分:0)

另一种选择是使用jinja2 tojson过滤器:

<script>
  let javascript_var = {{ python_var|tojson }};
</script>

您可能还需要根据传递的内容使用safe过滤器:

<script>
  let javascript_var = {{ python_var|tojson|safe }};
</script>