1

Bu sayfada herhangi bir tanımlanmış belge bulunamadı, ancak çoklu görünümlerde kenar çubuğunda kullanmam gereken bir iletişim formum var. Şu anda kodum kirli çünkü formu işlemek için birden çok görünümde aşağıdaki kod parçacığını yineliyorum. Gönderi İsteği'ni miras alınabilecek bir şablona yerleştirmenin bir yolu var mı?Inherited Post İsteği ile Birden Fazla Görünümte Tek Django Formu

def contact(request): 
    form_class = ContactForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST) 
     messages.add_message(request, messages.SUCCESS, 'Thank you, we have received your message.') 

     if form.is_valid(): 
     ... 

Görünüm Yardımlarınız için teşekkür ederim. Eğer başında kendi işlevi oluşturmak,

def contact(request): 
    # First you choose the form. 
    form_class = ContactForm 

    # Then you want to know if request is POST type 
    if request.method == 'POST': 
     # You take the form data from given POST 
     form = form_class(data=request.POST) 
     # You add message to messages. 
     messages.add_message(request, messages.SUCCESS, 'Thank you, we have received your message.') 

Eğer tekrar tekrar aynı tekrar ve yaparsanız yapabilirsiniz: Artık

+1

Sana * gerçekten * bir form miras * diyerek ne demek bilmiyorum:

def take_message(request, form, messages, message): # I'm reinitializing <form> variable here. form = form(data=request.POST) # That <message> variable below must be a string, then you can dynamically pass your message. messages.add_message(request, messages.SUCCESS, message) 

Sonra benim bakış aşağıdaki gibidir: Yani, aşağıdaki gibi take_message yöntem değiştiriyorum ama sanırım sınıf temelli görüşler size yardımcı olabilir. | Ancak, her zaman yukarıdaki kodunuzu tekrarlamak istemediğinizi düşünüyorsanız, bu size yardımcı olabilir: https://codeshare.io/ZN7nx –

+0

Kanlı parlak! Bir kaç dakikalığına asıldım, sonra 'iletişim' fonksiyonumda '{' form ': ContactForm}' yazmam gerektiğini fark ettim. Kod paylaşımını doğru olarak kabul etmem için bir cevap olarak yerleştirebilir misiniz? Ayrıca, eğer sakıncası yoksa, kodunuzun '(req, msg)' kısmı ile ilgili bazı belgelere işaret edebilir misiniz? Aradım ama nereden geldiğini göremedim. Tekrar teşekkürler!! –

+0

Belgelerindeki bir şey değil. Sadece bir fonksiyon yarattınız ve argüman olarak 'request',' message' ve 'form_class' komutlarını geçtiniz. Bu kadar. Bir süre sonra cevap vereceğim. –

cevap

1

, ben her görünüm çalıştırılır iken aşağıdaki gibi aynı işlemi yapmak farz ediyorum Herhangi bir uygulamanın views.py dosyalarınızı kısa ve not to repeat yourself tekrar tekrar yapmak.

def take_message(request, form, messages, message): 
    if request.METHOD == "POST": 
     # I'm reinitializing <form> variable here. 
     form = form(data=request.POST) 
     # That <message> variable below must be a string, then you can dynamically pass your message. 
     messages.add_message(request, messages.SUCCESS, message) 

Sonra görünümünde kullanın: bunlar yöntem olarak herhangi bir istek türü işleyebilir beri class-based views kullanmak için

def contact(request): 
    take_message(request, ContactForm, messages, "Thanks, we got your message.") 
    # And the rest here. 

Ancak, ben tavsiye ederim. *

from django.views.generic import TemplateView 
# And any other important imports. 

# ... 

class ContactView(TemplateView): 
    template_name = "contact.html" # This is your template. 

    def get(self, request): 
     # Do things when the method is GET. Like, viewing current messages in a hypothetical admin template. 

    def delete(self, request): 
     # Do things when the method is DELETE. Don't forget to use authentication here, so only superuser can delete messages. 

    def post(self, request): 
     # Do things when the method is POST. 
     # I'm assuming anonymous users can send messages, so there's no need for authentication here. 
     take_message(request, ContactForm, messages, "Thanks you, we got your message.") 
     # Other things to do. 

# urls.py 
url(r"^contact/$", ContactView.as_view(), name="contact-page")