2016-09-29 6 views
0

javascriptの警告機能を使用してログイン/サインアップするときに、ユーザーにメッセージを表示しようとしています。私はこのようなことをしようとしていますが、うまくいかないようです。djangoのメッセージをhtmlではなく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 %} 

答えて

0

わからないとして、これは動作するはずです:

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

マインドalertことがの実行を停止JavaScriptを使用すると、その時点で1つのアラートが表示されます。あなたが一緒にすべてのメッセージをしたい場合は、使用することができます

<script> 
var messages = {{messages|jsonify}}; 
if (messages.length) alert(messages.join('\n')); 
</script> 

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

(ここでも、テストされていない)

をしかしthisをチェックし、私はそれは私が提案した他のソリューションよりも少しきれいだと思います

1

DjangoはJavascriptが提供される前にテンプレートタグを処理します.JavascriptのタグはHTMLと同じ方法で使用できますが、すべてが翻訳されたクライアントに到着するため差はありません。例えば

は、ここで私が使用しているものです:あなたのケースでは

<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ループの外にスクリプトを移動した。

複数のメッセージがある場合は、それぞれのアラートを表示すると迷惑になることがあります。

関連する問題