2016-09-29 129 views
0

我試圖顯示消息給用戶,當他們登錄/註冊使用JavaScript的警報功能。我正在嘗試這樣的事情,但它似乎並沒有工作。讓Django的消息出現在Javascript alert中而不是html?

將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 %} 

回答

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> 
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),而不是你的消息的JavaScript會返回一個錯誤alert("Hello World")。我也將該腳本移到了for循環之外,但我認爲你的方式不會導致任何問題。

雖然請記住,如果有多條消息,顯示每條消息警報可能會變得煩人。