Django联系方式不包括';我没有出现

Django联系方式不包括';我没有出现,django,forms,contact,Django,Forms,Contact,我试图创建django教程中的联系人表单,但不幸的是,该表单没有显示为{{form}。唯一显示的是submit按钮。您可以在下面找到代码: forms.py from django import forms # Create your forms here. class ContactForm(forms.Form): name = forms.CharField() email = forms.EmailField() message = forms.CharFiel

我试图创建django教程中的联系人表单,但不幸的是,该表单没有显示为{{form}。唯一显示的是submit按钮。您可以在下面找到代码:

forms.py

from django import forms
# Create your forms here.

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.core.mail import send_mail
from contact.forms import ContactForm
# Create your views here.

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']

            recipients = ['myemail@outlook.com']

            send_mail(name, email, message, recipients)
            return HttpResponseRedirect(reverse('contact-thanks'))
    else:
        form = ContactForm()
    return render(request, 'contact/contact-form.html', {
        'form': form,
    })
视图.py

from django import forms
# Create your forms here.

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.core.mail import send_mail
from contact.forms import ContactForm
# Create your views here.

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']

            recipients = ['myemail@outlook.com']

            send_mail(name, email, message, recipients)
            return HttpResponseRedirect(reverse('contact-thanks'))
    else:
        form = ContactForm()
    return render(request, 'contact/contact-form.html', {
        'form': form,
    })
联系人表单.html

<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{%csrf\u令牌%}
{{form.as_p}}
这应该行得通

from django.core.context_processors import csrf

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']

            recipients = ['myemail@outlook.com']

            send_mail(name, email, message, recipients)
            return HttpResponseRedirect(reverse('contact-thanks'))
    else:
        form = ContactForm()

    args = {'form' : form}
    args.update(csrf(request))
    return render(request, 'contact/contact-form.html', args)

两天后,我终于找到了解决办法。错误在URL.py文件中。(所以下次我也会包括url.py)谢谢你们的帮助

我使用的是TemplateView:

url(r'^$', TemplateView.as_view(template_name='contact/contact-form.html'), name="contact-form"),
而不是添加我创建的视图,以便能够显示和处理表单

url(r'^$', 'contact.views.contact', name="contact"),

在url中使用模板名称不是一个好做法。
试试这个:

url(r'^/contact$','appname.views.contact',name='contact')

这意味着您的视图只用于呈现html页面,而不是“从”,所以现在您应该测试一些东西,返回render(请求,'contact/contact form.html',{'form':form,'test':'this for testing purpose',})并在html页面中打印{{test}您的表单似乎未初始化。请尝试
form=ContactForm()
,然后在请求时尝试
。方法
不使用
else的部分
,然后查看它是否有效。@hizbul25仍不显示“这是用于测试目的”@sagarchalise同样的事情发生了,表单没有显示。也许我的URL.py@hizbul25中有什么错误<代码>url(r'^$',TemplateView.as_view(template_name='contact/contact form.html'),name=“contact”)被搞糊涂了!这与我发布的答案相同吗?只需更改您的url。但是一切都可能正常。但是这个url.py在app contact中,app“contact”的url已经是“contact”,所以我没有将它添加到contact/url.py。避免使用url/contact/contact。