2011-01-26 5 views
11

मैं django (1.2.4) के लिए नया हूं। मैंने सामान्य विचारों के साथ कुछ क्रूड बनाया है। लेकिन जब मैं django के मैसेजिंग फ्रेमवर्क का उपयोग करके छात्र बनाया जाता है तो मैं "छात्र सफलतापूर्वक जोड़ा गया" जैसे कुछ कैसे दिखा सकता हूं?अगर हम django सामान्य विचारों का उपयोग करते हैं तो सफलता संदेश कैसे भेजें

उत्तर

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 पर जाने में रुचि रखते हैं तो आपको उनको देखना चाहिए। वे अधिक अनुकूलन की अनुमति दे सकते हैं, सुनिश्चित नहीं है।

लंबे समय तक मैं सामान्य रूप से सामान्य विचारों का उपयोग करके लाभ फ़ॉर्म देखता हूं, और यह जोड़ने/अपडेट जैसी चीज़ों के लिए दोगुना हो जाता है।

+0

धन्यवाद, मैं, के रूप में यह काफी लचीला व्यावहारिक स्थितियों को संभालने के लिए नहीं है सामान्य दृश्य का उपयोग नहीं करने का फैसला किया है । – Myth

+0

मैं इस जवाब को स्वीकार कर रहा हूं क्योंकि इससे मुझे अपना निर्णय लेने में बहुत मदद मिली है (दूसरों के लिए: मैंने अभी तक कोड का परीक्षण नहीं किया है) – Myth

+0

+1। अच्छा समाधान! आप सजावटी हैं निश्चित रूप से संदेश मॉड्यूल में शामिल किया जाना चाहिए। – AJJ

2

कार्यक्षमता हैं जिन्हें आप के लिए पहले से ही Django सामान्य दृश्य में कार्यान्वित किया जाता है पूछ रहे हैं:

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

आप अपने मुख्य टेम्पलेट में displaying messages द्वारा संदेश नहीं देखेंगे।

+0

आप कई इस जवाब में यूआरएल अपडेट करना चाहते हैं, लिंक मर चुके हैं – DeA

35

Django 1.6+ के रूप में, किसी भी class-based generic views उपयोग कर, आप successMessageMixin पर भरोसा कर सकते हैं। यह आपकी कक्षा परिभाषा में मिश्रण जोड़ने और success_message को जो कुछ भी आप चाहते हैं उसे विशेषता के रूप में सरल है।

ओलिवियर वर्डियर के रूप में उल्लेख किया गया है, कृपया अपने मुख्य टेम्पलेट में 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) 
संबंधित मुद्दे