0

我正在尝试在用户使用 javascript 的警报功能登录/注册时向他们显示消息。我正在尝试这样的事情,但它似乎不起作用。

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

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

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

然而,以下工作:

{% if messages %}<ul>{% for message in messages %}
    <li>{{ message }}</li>
{% endfor %}</ul>{% endif %}
4

2 回答 2

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 }}Javascript 将返回错误。我还将脚本移到了 for 循环之外,尽管我认为您的方式不会引起任何问题。alert(Hello World)alert("Hello World")

虽然请记住,如果有多条消息,为每条显示警报可能会很烦人。

于 2016-09-29T12:46:19.123 回答
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 %}

(再次,未测试)

但是检查一下,我认为它比我提出的其他解决方案要干净一些:

<script>
var messages = {{messages|jsonify}};
if (messages.length) alert(messages.join('\n'));
</script>
于 2016-09-29T12:42:13.983 回答