フォーム送信シナリオでは、フォームは「/submit」に投稿されます。成功時にユーザーを「/ sucess」にリダイレクトし、レンダリングメッセージを新しいURLのテンプレートに渡したいです。Djangoでこれを行う方法は? render_to_response はリダイレクトを行わず、HttpResponseRedirect はテンプレートのレンダリングを行いません。
6 に答える
Daniel Roseman からの応答は危険である可能性があり、サイトが XSS の脆弱性にさらされる可能性があります。
この方法で行う必要がある場合は、渡されるメッセージから html タグを必ず取り除いてください。
より良い方法は、/success/?msg=ok にリダイレクトし、ビューに辞書を表示することです。
{ 'ok': 'Your success message' }
成功ページに動的メッセージが必要な場合は、何らかの方法でそこに渡す必要があります。リダイレクト先の URL の GET パラメータを介してこれを行うことができます。たとえばreturn HttpResponseRedirect('/success/?msg=My+success+message+here')
、成功ビューが取得できる値をセッションに設定することもできます。
あなたが望むことを行うための最良の方法は次のとおりです。 ビューで、成功メッセージ (またはエラー メッセージ) を dict として設定します。render_to_response を使用して、任意のテンプレートを表示します。
テンプレートで、メッセージがあるかどうか、およびメッセージがエラー メッセージか成功メッセージかを確認できます。
あなたの見解では:
if anyError:
dict = {"message" : {"error" : "The error message"}}
else:
dict = {"message" : {"success" :"The success message"}}
あなたのテンプレートで:
{% if message %}
{% if message.error %}
{{ message.error }}
{% else %}
{{ message.success }}
{% endif %}
{% endif %}
私が助けたことを願っています
Generic viewを拡張すれば、Django はすでにこれを行っていると思います。作成時には、オプションの引数「post_save_redirect」があります。この機能は、自動生成された Django 管理システムで使用されます。たとえば、ユーザーなどの新しいリソースが必要な場合は、URL "/user/add" に移動します。送信すると、「/user/1」にリダイレクトされ、「ユーザー #1 が保存されました」という成功メッセージが表示されます。これは可能ですが、一般的なビューを拡張せずにそれを行う方法をまだ研究しています. 私はまだ Django と python に非常に慣れていないので、Django コアを調べてどのように実行したかを見つけるのは簡単ではありません。