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

Luc*_*ang 21 javascript django templates

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

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

    {% block scripts %}  {% endblock %}
Run Code Online (Sandbox Code Playgroud)

我站点中的其余脚本都在块脚本中.

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

         if (auth_status) {
          //something
         }
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Pol*_*oli 81

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

无论如何,像

<script>
    var auth_status = {{ user.is_authenticated }};
</script>
Run Code Online (Sandbox Code Playgroud)

将无法工作,因为这将生成此HTML:

<script>
    var auth_status = True;
</script>
Run Code Online (Sandbox Code Playgroud)

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

这应该从Python到Javascript的转换:

<script>
    var auth_status = {{ user.is_authenticated|yesno:"true,false" }};
</script>
Run Code Online (Sandbox Code Playgroud)

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


The*_*tor 6

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

<script>
  let javascript_var = {{ python_var|tojson }};
</script>
Run Code Online (Sandbox Code Playgroud)

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

<script>
  let javascript_var = {{ python_var|tojson|safe }};
</script>
Run Code Online (Sandbox Code Playgroud)