Моя логическая переменная 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>