2011-06-14 27 views
1

這是我的views.py404處理表單中的單選按鈕時出錯。如何調試?

from 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 '^測試/','test.views.TestLayer ',name ='testlayer'),

當我點擊提交按鈕表單要麼得不到處理,要麼拋出404錯誤。根據形式和模板,我的觀點是否正確?我從表單中生成了模板。

+0

Django輸出註釋到404頁面。這裏面是什麼?你想完成什麼任務? – DrTyrsa 2011-06-14 11:19:51

+0

@DrTysra我在頁面上有一堆單選按鈕和用戶文本字段。我只想接受模板中的值並將其存儲在數據庫中。 – IamH1kc 2011-06-14 11:26:26

回答

1

有幾件事情,我注意到你的視圖和表單代碼...

首先,你TESTFORM類定義「單選」兩次,而不是你要找的這兩個字段在表單的數據清理在視圖中收集: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) 

另外,您的網址模式不以$結束,您可以前綴你的模式,以避免重複的路徑到您的視圖功能(S):

#urls.py 
from django.conf.urls.defaults import * 

urlpatterns = patterns('test.views', 
    url(r'^tests/$','test_layer', name='testlayer'), 
) 

最後,你的視圖函數名稱是標題:TestLayer。在Python中,函數名稱,變量等的約定較低,下劃線用於分隔單詞,而類是以標題爲基礎的。

希望能幫助你。

相關問題