如何解决404处理表单中的单选按钮时出错如何调试?
| 这是我的views.pyfrom django.conf import settings
from django.shortcuts import render_to_response
from django.template import RequestContext,loader
from django import forms
def TestLayer(request):
users = User.objects.all()
if request.method == \'POST\':
form = TestForm(request.POST)
if form.is_valid():
user = form.cleaned_data[\'user\']
rad1=form.cleaned_data[\'radio1\']
rad2=form.cleaned_data[\'radio2\']
test = Permission()
test.user = user
test.val = rad1 + rad2
test.save()
return render_to_response(\'testlayer.html\',{\'user\':users})
else:
form = TestForm()
return render_to_response(\'testlayer.html\',{\'user\':users})
这是我的forms.py
from django import forms
from django.forms.widgets import RadioSelect
class TestForm(forms.Form):
user = forms.CharField(max_length=100)
RADIO_CHOICES1 = [[\'1\',\'Radio 1\'],[\'2\',\'Radio 2\']]
RADIO_CHOICES2 = [[\'3\',\'Radio 2\'],[\'4\',\'Radio 2\']]
radio = forms.ChoiceField( widget=RadioSelect(),choices=RADIO_CHOICES1)
radio = forms.ChoiceField( widget=RadioSelect(),choices=RADIO_CHOICES2)
我的urls.py是这个
url(r \'^ tests / \',\'test.views.TestLayer \',name = \'testlayer \'),
当我单击“提交”按钮时,表单要么没有得到处理,要么抛出404错误。根据表格和模板,我的观点正确吗?我已经从表格中生成了模板。
解决方法
关于您的视图和表单代码,我注意到了几件事...
首先,您的TestForm类定义了两次“ radio”,而不是您在视图的表单的已清理数据集合中查找的两个字段:radio1,radio2
其次,您不会将表单传递给视图中的模板。
第三,不需要两次返回render_to_response,甚至不需要创建新的测试表单实例的情况。而是尝试以下方法:
#views.py
from django.conf import settings
from django.shortcuts import render #assumes Django 1.3
#these imports seem to be missing...
from your_app.forms import TestForm
from your_app.models import Permission
def test_layer(request):
users = User.objects.all()
form = TestForm(request.POST or None)
if request.method == \'POST\':
if form.is_valid():
cleaned_data = form.cleaned_data
user = cleaned_data.get(\'user\')
radio1 = cleaned_data.get(\'radio1\')
radio2 = cleaned_data.get(\'radio2\')
test = Permission()
test.user = user
test.val = radio1 + radio2
test.save()
return render(request,\'testlayer.html\',{\'user\':users,\'form\' : form})
#forms.py
from django import forms
class TestForm(forms.Form):
user = forms.CharField(max_length=100)
RADIO_CHOICES1 = [[\'1\',\'Radio 1\'],[\'2\',\'Radio 2\']]
RADIO_CHOICES2 = [[\'3\',\'Radio 2\'],[\'4\',\'Radio 2\']]
radio1 = forms.ChoiceField( widget=forms.RadioSelect(),choices=RADIO_CHOICES1)
radio2 = forms.ChoiceField( widget=forms.RadioSelect(),choices=RADIO_CHOICES2)
另外,您的网址格式不以$结尾,您可以在其格式前面加上前缀,以避免重复查看函数的路径:
#urls.py
from django.conf.urls.defaults import *
urlpatterns = patterns(\'test.views\',url(r\'^tests/$\',\'test_layer\',name=\'testlayer\'),)
最后,您的视图函数名称使用了标题大小写:TestLayer。在Python中,这是一个约定,函数名称,变量等用小写的下划线分隔单词,而类则用小写标题。
希望对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。