不同意见共享Django联系表

问题描述:

我可以发誓这是过去工作,但显然我没有测试,因为我应该有。我有一个表格,允许用户请求关于特定房地产列表的信息。有四(4)个单独的视图,其中一个显示所有,另三个简单地按属性过滤列表,即租赁,仅限于房地产等。不同意见共享Django联系表

表单的工作方式应该像它应该在视图中列出对象.all()和我以为我可以在我的其他视图中调用form_class,但是当我在被过滤的页面上时,表单不起作用...浏览器中没有错误消息或任何东西,电子邮件只是从来没有到达我们的收件箱。

如果你可以看看我的观点并提供一些反馈,我将非常感激,请让我知道如果你需要看到任何其他的东西。谢谢。

from django.template.loader import get_template 
from django.core.mail import EmailMessage 
from django.template import Context 
from django.shortcuts import render, redirect 
from .models import Listing 
from .forms import ContactForm 


def listing_list(request): 
    listings = Listing.objects.all().order_by('listing_order') 
    form_class = ContactForm 

    if request.method == 'POST': 
     form = form_class(data=request.POST) 

     if form.is_valid(): 
      contact_name = request.POST.get('contact_name', '') 
      contact_phone = request.POST.get('contact_phone', '') 
      contact_email = request.POST.get('contact_email', '') 
      contact_listing = request.POST.get('contact_listing', '') 
      form_content = request.POST.get('content', '') 

      # Email the profile with the 
      # contact information 
      template = get_template('contact_template.txt') 
      context = Context({ 
       'contact_name': contact_name, 
       'contact_phone': contact_phone, 
       'contact_email': contact_email, 
       'contact_listing': contact_listing, 
       'form_content': form_content, 
      }) 
      content = template.render(context) 

      email = EmailMessage("Form Submission from Listings Page", content, contact_email, 
           ['[email protected]', '[email protected]'], ['[email protected]']) 

      email.send() 

      return redirect('listing_list') 
    return render(request, 'listing/listing_list.html', {'listings': listings, 'form': form_class}) 


def full_service(request): 
    listings = Listing.objects.filter(location_type='FULL_SERVICE').order_by('listing_order') 
    form_class = ContactForm 
    return render(request, 'listing/listing_list.html', {'listings': listings, 'form': form_class}) 


def quick_serve(request): 
    listings = Listing.objects.filter(location_type='QUICK_SERVE').order_by('listing_order') 
    form_class = ContactForm 
    return render(request, 'listing/listing_list.html', {'listings': listings, 'form': form_class}) 


def with_real(request): 
    listings = Listing.objects.filter(location_type='WITH_REAL').order_by('listing_order') 
    form_class = ContactForm 
    return render(request, 'listing/listing_list.html', {'listings': listings, 'form': form_class}) 
+0

以及在其他3次,你没有form.is_valid整个块,实际处理表格并发送电子邮件...或者我错过了什么?只需将其作为mixin并将其包含到每个视图即可。此外,这整个设计都很糟糕,您必须将代码复制到每个视图,只需使用不同的'location_type'。 –

+0

感谢您使用mixin的快速反馈和参考。是的,我可耻地把我的脏代码放在这里给大家看:)我知道它可以好多了,但我仍然通过学习Python/Django来攻击我的方式,并且随着我的进展,我会折射。谢谢。 –

+0

我通常使用基于类的视图,所以我使用了mixin,因为它是我脑中弹出的第一个东西,但是您可以将普通函数视为视图,但只需使用参数就可以实现所有功能。 –

Class-based views(和someneat Django的shortcuts)救援:

from django.core.mail import send_mail 
from django.views import generic 
from django.template import render_to_string 


class ContactFormView(generic.FormView): 
    form_class = ContactForm 
    template_name = 'listing/listing_list.html' 
    success_url = 'listings' 
    location_type = None 

    def get_context_data(self, **kwargs): 
     context = super(ContactFormView, self).get_context_data(**kwargs) 
     context['listings'] = (Listing.objects 
           .filter(location_type=self.location_type) 
           .order_by('listing_order')) 
     return context 

    def form_valid(self, form): 
     message = render_to_string('contact_template.txt', form.cleaned_data) 
     send_mail('Form Submission from Listings Page', message, 
        form.cleaned_data['contact_email']) 
     return super(ContactFormView, self).form_valid(form) 


class FullService(ContactFormView): 
    location_type='FULL_SERVICE' 


class QuickServe(ContactFormView): 
    location_type='QUICK_SERVE' 
+0

哇,这比我有更清洁....感谢您的直接链接以及快捷键和render_to_string。我没有使用send_mail,所以我需要重新使用SendGrid,但这不应该太困难。再次感谢。 –

+0

不客气。顺便说一句,如果您使用的是Sendgrid,则不需要更改任何内容,只需在项目中添加后端即可:https://github.com/elbuo8/sendgrid-django –