我尝试使用javascript的提醒功能登录/注册时向用户显示消息。我尝试这样的事情,但它似乎没有用。
将django的变量传递给模板中的脚本的正确语法是什么?
这就是我想要的,但这种语法不起作用。
focus_get
但是以下是有效的:
{% if messages %}{% for message in messages %}<script>alert({{}});</script>{% endfor %}{% endif %}
答案 0 :(得分:1)
Django在提供Javascript之前处理模板标签 - 您可以像使用HTML一样使用Javascript中的标签,因为它们全部到达翻译的客户端,所以没有区别。
例如,这是我使用的:
<script>
{% if messages %}
{% for message in messages %}
Materialize.toast('{{ message }}', 4000);
{% endfor %}
{% endif %}
</script>
在你的情况下,那是:
{% if messages %}
<script>
{% for message in messages %}
alert("{{ message }}");
{% endfor %}
</script>
{% endif %}
请注意{{ message }}
周围的引号 - 如果您的邮件显示为alert(Hello World)
而非alert("Hello World")
,则Javascript会返回错误。我也把脚本移到了for循环之外,虽然我不认为你的方式会引起任何问题。
虽然如果有多条消息,请记住,显示每条消息的警报可能会很烦人。
答案 1 :(得分:0)
不确定我现在无法测试,但这应该有效:
{% if messages %}{% for message in messages %}<script>alert("{{ message }}");</script>{% endfor %}{% endif %}
请注意alert
停止执行JavaScript,因此您当时会看到一个警报。如果您想要将所有消息放在一起,您可以使用:
{% if messages %}<script>alert("{% for message in messages %}{{ message }}\n{% endfor %}");</script>{% endif %}
(再次,未经测试)
但是检查this,我认为它比我提出的其他解决方案更清晰:
<script>
var messages = {{messages|jsonify}};
if (messages.length) alert(messages.join('\n'));
</script>