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
另一种选择是使用 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)