让 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 - 无法让加载数据工作

Rails - 设计 - 重定向和成功消息未出现

使用 Django 的 JQueryUI 自动完成搜索不起作用

如何制作 django 消息 *** 样式?

让 Django 项目在 mod_wsgi 中运行时出现问题

JavaScrip入门