33

这是我的 base.html 标头中的代码

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

    {% block scripts %}  {% endblock %}

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

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

         if (auth_status) {
          //something
         }

手头的错误是 auth_status 始终为 True,何时应该打开和关闭取决于用户是否登录。Request_context 正在传递给模板,因此这不应该是错误。

谢谢

4

2 回答 2

113

因为我看到你的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 文档:https ://docs.djangoproject.com/en/dev/ref/templates/builtins/#yesno

于 2012-09-12T20:28:01.663 回答
4

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

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

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

<script>
  let javascript_var = {{ python_var|tojson|safe }};
</script>
于 2019-08-16T13:04:05.127 回答