不同意见共享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})
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'
哇,这比我有更清洁....感谢您的直接链接以及快捷键和render_to_string。我没有使用send_mail,所以我需要重新使用SendGrid,但这不应该太困难。再次感谢。 –
不客气。顺便说一句,如果您使用的是Sendgrid,则不需要更改任何内容,只需在项目中添加后端即可:https://github.com/elbuo8/sendgrid-django –
以及在其他3次,你没有form.is_valid整个块,实际处理表格并发送电子邮件...或者我错过了什么?只需将其作为mixin并将其包含到每个视图即可。此外,这整个设计都很糟糕,您必须将代码复制到每个视图,只需使用不同的'location_type'。 –
感谢您使用mixin的快速反馈和参考。是的,我可耻地把我的脏代码放在这里给大家看:)我知道它可以好多了,但我仍然通过学习Python/Django来攻击我的方式,并且随着我的进展,我会折射。谢谢。 –
我通常使用基于类的视图,所以我使用了mixin,因为它是我脑中弹出的第一个东西,但是您可以将普通函数视为视图,但只需使用参数就可以实现所有功能。 –