django(1.2.4)の新機能です。私はジェネリック・ビューを使っていくつかの無駄を作りました。しかし、学生がdjangoのメッセージングフレームワークを使って作成されたときに、「学生が正常に追加されました。djangoジェネリックビューを使用すると成功メッセージを送信する方法
答えて
私が知る限り、伝統的な一般的なビューを使用してこれを行う簡単な方法はありません。私はいつもジェネリックビューのドキュメントがかなり不足していると感じました。
理論的には、リダイレクトが送信に成功したという前提で、デコレータを使用することができます。そう、Djangoの1.3 class-based generic views導入、
try:
from functools import wraps
except ImportError:
from django.utils.functional import wraps
from django.http import HttpRedirectResponse
from django.contrib import messages
from django.views.generic import *
def add_message(success_message=None):
def decorator(func):
def inner(request, *args, **kwargs):
resp = func(request, *args, **kwargs)
if isinstance(resp, HttpRedirectResponse):
messages.success(request, message)
return resp
return wraps(func)(inner)
return decorator
student_info_edit = {
'template_name': 'myapp/student/form.html',
'template_object_name': 'student',
'form_class': studentForm,
}
student_info_new = {
'template_name': 'myapp/student/form.html',
'form_class': studentForm,
'post_save_redirect': '/myapp/students/',
}
urlpatterns += patterns('',
url(r'^students/$', list_detail.object_list, { 'queryset': Student.objects.all() }, name="students"),
url(r'^students/(?P<object_id>\d+)/$', add_message("Student record updated successfully")(create_update.update_object), student_info_edit, name="student_detail"),
url(r'^students/new$', add_message("The student was added successfully.")(create_update.create_object), student_info_new, name="student_new"),
)
言った全ての符号化:
urls.py:
ですから、このようなものを(このコードのいずれもテストされていない)書くことができますあなたがDjango 1.3への移行に興味があるなら、それらを調べるべきです。彼らは、より多くのカスタマイズを可能にするかもしれません。
長期的には、一般的なビューを使用する利点はほとんどありませんが、これは追加/更新のように2倍になります。
あなたが求めているが、すでにDjangoの汎用ビューで実装された機能:
https://github.com/django/django/blob/1.2.X/django/views/generic/create_update.py#L115
あなたのメインテンプレートにdisplaying messagesしてメッセージが表示されます。
多くの場合、この回答のURLを更新したい、リンクが死んでいる – DeA
Django 1.6+からは、class-based generic viewsを使用すると、successMessageMixinに依存することができます。あなたのクラス定義にmixinを追加して、あなたが望むものにsuccess_message
属性を設定するのと同じくらい簡単です。
Olivier Verdierが述べたように、メインテンプレートのdisplay messagesに覚えておいてください!
docsからの簡単な例:
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"
より複雑な例:現実的なシナリオを処理するのに十分な柔軟性ではないよう
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import ComplicatedModel
class ComplicatedCreate(SuccessMessageMixin, CreateView):
model = ComplicatedModel
success_url = '/success/'
success_message = "%(calculated_field)s was created successfully"
def get_success_message(self, cleaned_data):
# cleaned_data is the cleaned data from the form which is used for string formatting
return self.success_message % dict(cleaned_data,
calculated_field=self.object.calculated_field)
- 1. iChatとAppleScriptを使用してメッセージを送信する方法
- 2. フォーム送信時に成功メッセージを表示する方法 - ASP.NET MVC 5
- 3. フォーム送信後に成功メッセージを表示するajax
- 4. フォームを送信すると成功または失敗するメッセージ
- 5. ブロードキャストレシーバクラスを使用してSMSメッセージを送信する方法
- 6. socket.ioを使用してメッセージを送信する方法
- 7. JavaScriptを使用してwhatsappメッセージを送信する方法
- 8. Thymeleaf:送信ボタンをクリックすると、成功メッセージが表示されます
- 9. ジェネリックビューを使用してフォームのビューをカスタマイズする方法DjangoのCreateView
- 10. フォーム送信時にブートストラップローディングボタンの成功/エラーをバインドする方法
- 11. RedirectToActionが使用されたときに成功メッセージを表示する方法
- 12. nullmailerはmail.errに成功メッセージを送信しますか?
- 13. 403 HttpPostを使用してDjangoにデータを送信すると、FORBIDDENメッセージ
- 14. PHPはフォームを送信し、成功メッセージと共にフォームにとどまる
- 15. iPhoneで送信メッセージと受信メッセージを保存するアプリケーションを作成する方法
- 16. PostMessageとWM_COPYDATAを使用して文字列メッセージを送信する方法
- 17. Spring統合によるFTPファイルアップロード成功メッセージの送信
- 18. Django:ログイン成功メッセージでusernameの代わりにファーストネームを使用
- 19. ジェネリックビューを使用したdjangoページネーションの作成
- 20. cakephpアプリケーションからSMSを送信し、成功すればメッセージを表示する方法は?
- 21. JQueryダイアログボックスを使用してフォームを送信し、成功、失敗メッセージを表示する
- 22. フォーム送信後に同じポップアップウィンドウ内に成功メッセージを表示
- 23. ページリフレッシュなしでhtmlフォームを送信するhtmlページに表示成功メッセージ
- 24. Djangoジェネリックビューのテスト
- 25. HTTP500エラーPHP54とTwilioを使用してメッセージを送信する
- 26. 同じページで送信した後に成功メッセージを取得する方法 - 新しいページではない
- 27. DjangoクラスベースのジェネリックビューとModelForm
- 28. Connectionオブジェクトを取得し、ラチェットを使用してメッセージを送信する方法
- 29. Djangoでtoastrを使用してメッセージを成功または失敗させる方法
- 30. Viberメッセージを使ってAndroidアプリからメッセージを送信する方法
おかげで、私は、一般的なビューを使用しないことを決定しました。 – Myth
私はこの回答を受け入れてくれました。私の決定に多くの助けをしてくれました(他の人は:まだコードをテストしていません) – Myth
+1。ニースの解決策!デコレータはメッセージモジュールに必ず含まれているはずです。 – AJJ