Моя логическая переменная django template не работает должным образом в javascript

Вот код в заголовке base.html

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

    {% block scripts %}  {% endblock %}

Остальные скрипты на моем сайте находятся в блочных скриптах.

В дочернем шаблоне (в блоке script и в тегах script) у меня есть этот код,

         if (auth_status) {
          //something
         }

Ошибка под рукой: auth_status всегда правка, когда она должна быть включена и выключена в зависимости от того, зарегистрирован ли пользователь. Request_context передается шаблону, поэтому это не должно быть ошибкой.

Спасибо

Ответ 1

Для того, что я вижу, ваша переменная auth_status кажется строкой, а не логической. Переменная с непустой строкой в ​​javascript будет оцениваться в true в предложении if.

Во всяком случае, что-то вроде

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

не будет работать, потому что это сгенерирует этот HTML-код:

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

Поскольку Python True boolean находится в верхнем регистре.

Это должно сделать перевод с Python на Javascript:

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

Проверить дано здесь: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#yesno

Ответ 2

Другой вариант - использовать фильтр tojson jinja2:

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

Вы также можете использовать фильтр safe в зависимости от того, что вы передаете:

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