我是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. 如何使用新的Gmail REST API成功發送消息?
- 2. Django Success使用django.contrib.messages發送消息
- 3. 發送通用消息
- 4. 使用PowerShell通過lync發送消息
- 5. 使用javascript通過websocket發送消息
- 6. 通過whatsapp使用Intent發送消息
- 7. 如何在Django中使用toastr成功或失敗消息
- 8. nullmailer發送成功消息到mail.err?
- 9. 發送消息mongoose-im不成功
- 10. 如何使用NextPeer發送消息
- 11. 如何使用snmpjs發送消息
- 12. 如何使用pyOSC發送消息?
- 13. 如何使用變量發送消息
- 14. 如何使用PHP發送HTML消息?
- 15. 如何在django中使用HttpResponseRedirect發送context_instance和一些消息?
- 16. Django如何重用所有視圖通用的視圖功能
- 17. 使用javax.mail發送消息
- 18. 使用C#發送消息
- 19. 我如何知道我的消息是使用spring amqp成功發送的?
- 20. Django:發送GET消息
- 21. Django發送消息問題
- 22. Django消息框架 - 如何僅顯示成功消息
- 23. 生成xml消息通過tcp發送
- 24. 如何使用遞送方法使用opensmpp發送短消息?
- 25. 如何使用v3發送消息/視頻推薦?
- 26. 使用基於類的視圖顯示成功的消息
- 27. 如何使用rabbitMQ將消息發送到消息隊列?
- 28. Django的 - 如何使用消息內置視圖
- 29. 檢查消息是否通過whatsapp成功發送
- 30. 如何通過使用C++的匡威發送ConverseRequest消息
謝謝,我已經決定不使用通用視圖,因爲它不夠靈活地處理實際場景。 – Myth 2011-01-26 09:38:39
我接受這個答案,因爲它幫助我做出了很多決定(對於其他人:我還沒有測試代碼) – Myth 2011-01-26 09:45:44