django (1.2.4)를 처음 사용했습니다. 나는 일반적인 견해들로 일부 진부한 것을 만들었다. 그러나 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으로 이동하는 것에 관심이 있다면, 그것들을 조사해야합니다. 더 많은 맞춤 설정을 허용 할 수 있습니다.
장기적으로 볼 때 일반보기를 사용하여 혜택 양식을 보는 경우는 거의 없으며 추가/업데이트와 같은 경우 두 배가됩니다.
이미 장고 일반적인 전망에 구현되어 요구되는 기능 :
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)
감사합니다, 나는 일반보기를 사용하지 않기로 결정했다 . – Myth
나는 내 결정을 내리는 데 많은 도움이되었으므로이 대답을 받아들입니다. (다른 사람들은 아직 : 코드를 아직 테스트하지 않았습니다) – Myth
+1. 좋은 해결책! 메시지 모듈에 데코레이터가 포함되어 있어야합니다. – AJJ