Django表单不显示 [英] Django form does not appear

查看:2013
本文介绍了Django表单不显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Django的Form类构建一个带有表单的网页。我已经包含了一些示例代码片段,但是我的问题是,我遵循Django文档和Djangobook中的教程,但无法让我的表单实际显示在页面上。

forms.py

  from django导入表格

类ResearchForm(forms.Form):
fam_choices = ...
spec_choices = ...
family = forms.ChoiceField(choices = fam_choices ,required = True)
species = forms.ChoiceField(options = spec_choices,required = True)

views.py

  from django.http import HttpResponse,HttpResponseRedirect,Http404 
来自django.shortcuts import mysite.forms中的
导入ResearchForm



def research(请求):
if request.method = ='GET':
form = ResearchForm(request.GET)
if form.is_valid():
f = form.cleaned_data ['family']
s = form.cleaned_data [ 'species']
return render(request,'thankyou.html',{})
else:
form = ResearchForm()#一个未绑定的表单
返回render(request,research.html,{'form':form})

research.html

  ... 
{{form.as_p}}
<按钮>提交< /按钮>
< / form>
...

只有按钮出现在网页上,而不是选择标签, ChoiceField 应该呈现。



编辑: 我编辑了我的视图。

  def research(request):
form = ResearchForm(request .GET)
if form.is_valid():
return render(request,'thankyou.html',{})
else:
form = ResearchForm()
return return(request,'research.html',{'form':form})

编辑2:

urls.py

<$ p $ (r'^ admin /',include(admin.site.urls)),
url(r'^'),包括 urlpatterns = patterns('',
('cms.urls')),


如果settings.DEBUG:
urlpatterns = patterns('',
(r'^'+ settings。 MEDIA_URL.lstrip('/'),include('appmedia.urls')),
)+ urlpatterns


解决方案

当你第一次渲染页面时,第一个条件是称为:

  if request.method =='GET':

并且因为表单无效,所以它永远不会传递到任何地方,所以表单变量是空的。



在两个地方都应该有 POST 而不是 GET

  if request.method =='POST':
form = ResearchForm(request.POST)


I'm working with building a webpage with a form using Django's Form class. I've included some sample code snippets but my problem is that I've followed the Django docs and the tutorial in Djangobook but can't get my Form to actually display on the page.

forms.py

from django import forms

class ResearchForm(forms.Form):
    fam_choices = ...
    spec_choices = ...
    family = forms.ChoiceField(choices=fam_choices, required=True)
    species = forms.ChoiceField(choices=spec_choices, required=True)

views.py

from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
from mysite.forms import ResearchForm

...

def research(request):
    if request.method == 'GET': 
        form = ResearchForm(request.GET)
        if form.is_valid():
            f = form.cleaned_data['family']
            s = form.cleaned_data['species']
            return render(request, 'thankyou.html', {})
    else: 
         form = ResearchForm() # an unbound form
    return render(request, "research.html", {'form':form})

research.html

...
<form action="/research/" method="get" name="researchform">
   {{ form.as_p}}
   <button>Submit</button>
</form>
...

Only the button appears on the webpage, not the select tags that ChoiceField should render.

EDIT:

I edited my views.py to this:

def research(request):
    form = ResearchForm(request.GET)
    if form.is_valid():
        return render(request, 'thankyou.html', {})
    else: 
        form = ResearchForm()
        return render(request, 'research.html', {'form':form})

EDIT 2:

urls.py

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
)

if settings.DEBUG:
    urlpatterns = patterns('',
        (r'^' + settings.MEDIA_URL.lstrip('/'), include('appmedia.urls')),
    ) + urlpatterns

解决方案

When you first render the page the first condition will be called:

if request.method == 'GET':

and because form is not valid, it never gets passed anywhere, so the form variable is empty.

Instead of GET there should be POST in both places.

if request.method == 'POST': 
    form = ResearchForm(request.POST)

这篇关于Django表单不显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆