我是django(1.2.4)的新手。我创建了一些通用的意见。但是如何在使用django的消息框架创建学生时显示类似“学生成功添加”的内容?如何使用django通用视图发送成功消息
11
A
回答
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中引入class-based generic views,所以如果你有兴趣转向Django 1.3,你应该看看那些。他们可能会允许更多的定制,不确定。
从长远来看,我很少看到使用通用视图的好处形式,而这对于诸如添加/更新之类的东西来说是双倍的。
2
,你要求的是已经在Django通用视图实现的功能:
https://github.com/django/django/blob/1.2.X/django/views/generic/create_update.py#L115
你会看到在你的主模板,通过displaying messages的消息。
35
从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. 发送通用消息
- 2. 使用PowerShell通过lync发送消息
- 3. nullmailer发送成功消息到mail.err?
- 4. 如何使用snmpjs发送消息
- 5. 如何使用PHP发送HTML消息?
- 6. 如何使用变量发送消息
- 7. 如何使用NextPeer发送消息
- 8. Django如何重用所有视图通用的视图功能
- 9. 我如何知道我的消息是使用spring amqp成功发送的?
- 10. Django:发送GET消息
- 11. 生成xml消息通过tcp发送
- 12. 如何通过使用C++的匡威发送ConverseRequest消息
- 13. 如何在发送电子邮件后显示成功消息?
- 14. 如何在每次迭代后发送成功消息
- 15. 如何从cakephp应用程序发送短信,如果成功显示消息?
- 16. 通过应用程序发送消息
- 17. 使用Django通用视图
- 18. 如何通过图表api使用Accessstoken发送消息Facebook朋友
- 19. 通过HTTPS发送消息
- 20. 通过SuperSocket发送消息
- 21. 通过SIP发送消息
- 22. 使用硒向用户发送消息
- 23. 如何使用django-postman为每个用户提供发送消息的能力
- 24. 使用forground Ndef推送发送Ndef消息时获得通知?
- 25. 我如何发送消息?
- 26. 如何将消息发送到不同视图的按钮?
- 27. Eclipse如何将消息发送到视图?
- 28. 如何发送消息到视图ajax-like
- 29. MSMQ通用消息传送
- 30. 如何发送带有消息的命令以成功回送bash函数?
谢谢,我已经决定不使用通用视图,因为它不够灵活地处理实际场景。 – Myth 2011-01-26 09:38:39
我接受这个答案,因为它帮助我做出了很多决定(对于其他人:我还没有测试代码) – Myth 2011-01-26 09:45:44