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. socket.ioを使用してメッセージを送信する方法
- 3. ブロードキャストレシーバクラスを使用してSMSメッセージを送信する方法
- 4. RedirectToActionが使用されたときに成功メッセージを表示する方法
- 5. nullmailerはmail.errに成功メッセージを送信しますか?
- 6. ジェネリックビューを使用してフォームのビューをカスタマイズする方法DjangoのCreateView
- 7. 403 HttpPostを使用してDjangoにデータを送信すると、FORBIDDENメッセージ
- 8. iPhoneで送信メッセージと受信メッセージを保存するアプリケーションを作成する方法
- 9. JQueryダイアログボックスを使用してフォームを送信し、成功、失敗メッセージを表示する
- 10. Viberメッセージを使ってAndroidアプリからメッセージを送信する方法
- 11. netty-メッセージとデータを一緒に送信する方法は?
- 12. NSToolbarのNSComboBoxでデータソースとデリゲートにメッセージを送信する方法
- 13. MessageUIフレームワークを使用してiPhoneでiMessageメッセージを送信する方法
- 14. カスタマイズボタンと成功メッセージ
- 15. DjangoクラスベースのジェネリックビューとModelForm
- 16. ルーパースレッドを作成してすぐにメッセージを送信する方法は?
- 17. GCDAsyncSocketメッセージを送信する
- 18. ボタンがWM_COMMANDメッセージを送信するメッセージ
- 19. djangoのdate_basedジェネリックビューでフィルターの属性を渡す方法
- 20. フォームを送信し、成功/エラーを再評価するAjax
- 21. UIScrollViewをアニメーション中にscrollViewDidScrollメッセージを送信する方法
- 22. Django - ジェネリックビューでRobots.txtをロード
- 23. Djangoジェネリックビュー+ JQueryUIダイアログ+ Ajax
- 24. WCFサービスを使用してMSMQにメッセージを送信する
- 25. cutecomを使用してSM5100Bメッセージを送信する
- 26. pythonを使用してサーバーにメッセージを送信するSocketIO
- 27. smack APIを使用してメッセージを送受信する
- 28. Laravelのキューを使用してメッセージを送信する
- 29. Javaを使用してJMSメッセージを送信する
- 30. facebookを使用してメッセージを送信するandroid sdk
おかげで、私は、一般的なビューを使用しないことを決定しました。 – Myth
私はこの回答を受け入れてくれました。私の決定に多くの助けをしてくれました(他の人は:まだコードをテストしていません) – Myth
+1。ニースの解決策!デコレータはメッセージモジュールに必ず含まれているはずです。 – AJJ