POSTフォームのページがあり、URLにアクションが設定されています。
i.eこのページのURLが/form_url/
であると仮定します:..
/submit_url/
のビューはフォームデータを処理します。この後、フォームの同じページに成功メッセージを返したいと思います。 POSTフォームを処理するビューでは、ブラウザからフォームデータを「クリア」するためにHttpResponseRedirect
を使用します。しかし、この方法ではできません。次のようなことをしない限り、フォームページにメッセージを表示します。
return HttpResponseRedirect("/form_url/?success=1")
次に、テンプレートでこのパラメーターを確認します。ユーザーがページを更新しても、成功メッセージが表示されるため、この方法は好きではありません。
Django=管理サイトでは、オブジェクトの削除/追加では、POST submitの後にリダイレクトを使用し、何とか成功メッセージを表示します。 ?
私はすでにDjango "messaging"アプリを簡単に見ましたが、最初にどのように機能するかを知りたいです。
Django adminはDjango.contrib.messages
、次のように使用します。
あなたの見解では:
from Django.contrib import messages
def my_view(request):
...
if form.is_valid():
....
messages.success(request, 'Form submission successful')
テンプレートで:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li {% if message.tags %} class=" {{ message.tags }} " {% endif %}> {{ message }} </li>
{% endfor %}
</ul>
{% endif %}
Djangoメッセージフレームワークは、メッセージをセッションまたはCookieに保存します( storage backend に依存します)。
フォームデータをクリアするためにリダイレクトを行う必要はありません。必要なのは、フォームを再インスタンス化することだけです。
def your_view(request):
form = YourForm(request.POST or None)
success = False
if request.method == 'POST':
if form.is_valid():
form.save()
form = YourForm()
success = True
return render(request, 'your_template.html', {'form': form})
ユーザーがページを更新すると、GETリクエストが開始され、success
はFalse
になります。どちらの場合でも、フォームはGETまたはPOSTの成功時にバインド解除されます。
messages framework を活用する場合、メッセージが存在するかどうかを表示するためにテンプレートに条件を追加する必要があります。
from Django.contrib.messages.views import SuccessMessageMixin
from Django.views.generic.edit import CreateView
from myapp.models import Author
class AuthorCreate(SuccessMessageMixin, CreateView):
model = Author
success_url = '/success/'
success_message = "%(name)s was created successfully"
https://docs.djangoproject.com/en/1.11/ref/contrib/messages/