17

私はdjango(1.2.4)が初めてです。一般的なビューを使用していくつかのクラッドを作成しました。しかし、学生がジャンゴのメッセージングフレームワークを使用して作成されたときに、「学生が正常に追加されました」のようなものを表示するにはどうすればよいですか?

4

4 に答える 4

4

私の知る限り、従来の汎用ビューを使用してこれを行う簡単な方法はありません。私は常々、ジェネリック ビューに関するドキュメントがかなり不足していると感じていたので、それらを使用したことはありませんでした。

理論的には、リダイレクトが送信の成功を意味すると想定することで、デコレータを使用できます。

したがって、次のように書くことができます (このコードはテストされていません)。

urls.py :

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"),
)

Django 1.3 ではクラスベースのジェネリック ビューが導入されたので、Django 1.3 に移行することに関心がある場合は、それらを調べる必要があります。彼らはより多くのカスタマイズを許可するかもしれませんが、確かではありません.

長い目で見れば、一般的なビューを使用した給付フォームを目にすることはめったにありません。

于 2011-01-26T09:22:43.430 に答える
2

あなたが求めている機能は、Django のジェネリック ビューに既に実装されています。

https://github.com/django/django/blob/1.2.X/django/views/generic/create_update.py#L115

メイン テンプレートにメッセージを表示すると、メッセージが表示されます。

于 2011-04-03T07:59:51.990 に答える