让django的消息出现在Javascript警报而不是html中?

时间:2016-09-29 12:38:01

标签: javascript css django django-templates django-messages

我尝试使用javascript的提醒功能登录/注册时向用户显示消息。我尝试这样的事情,但它似乎没有用。

将django的变量传递给模板中的脚本的正确语法是什么?

这就是我想要的,但这种语法不起作用。

focus_get

但是以下是有效的:

{% if messages %}{% for message in messages %}<script>alert({{}});</script>{% endfor %}{% endif %}

2 个答案:

答案 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>