让 django 的消息出现在 Javascript 警报而不是 html 中?
Posted
技术标签:
【中文标题】让 django 的消息出现在 Javascript 警报而不是 html 中?【英文标题】:Making django's messages appear in Javascript alert rather than html? 【发布时间】:2017-02-07 19:04:34 【问题描述】:我正在尝试在用户使用 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 %
【问题讨论】:
【参考方案1】:不确定,因为我现在无法测试,但这应该可以:
% 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>
【讨论】:
【参考方案2】: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 循环之外,尽管我认为您的方式不会引起任何问题。
但请记住,如果有多条消息,为每条显示警报可能会很烦人。
【讨论】:
以上是关于让 django 的消息出现在 Javascript 警报而不是 html 中?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Django 的 JQueryUI 自动完成搜索不起作用