2012-11-01 38 views
2

我在Django tutorial (part 4)上,嘗試創建一個允許用戶選擇投票答案的表單。這些問題正確加載,但是當我點擊「投票」(即選擇選項,並提交形式)以下錯誤不斷顯示:表單提交在Django中保持失敗教程

Page not found (404) 
Request Method: POST 
Request URL: http://localhost:8000/polls/vote/6 
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order: 
^polls/ ^$ [name='index'] 
^polls/ ^(?P<poll_id>\d+)/$ [name='detail'] 
^polls/ ^(?P<poll_id>\d+)/results/$ [name='results'] 
^polls/ ^(?P<poll_id>\d+)/vote/$ [name='vote'] 
^admin/ 
The current URL, polls/vote/6, didn't match any of these. 

下面是從detail.html的代碼的形式爲:

{{ poll.question }} 

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %} 

<form action="/polls/vote/{{ poll.id }} " method="post"> 
{% csrf_token %} 
{% for choice in poll.choice_set.all %} 
    <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id  }}" /> 
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br /> 
{% endfor %} 
<input type="submit" value="Vote" /> 
</form> 

我懷疑問題是在<form action="/polls/vote/{{ poll.id }} " method="post">行,但我不知道如何解決它。

回答

4

更改URL,以/polls/{{poll.id}}/vote/

+0

Right on ...與網址匹配的模式錯誤。 –

+1

是啊...這一直髮生:) –

6

你有你的投票ID和vote行動扭轉。

你的URL模式的形式爲:

^polls/ ^(?P<poll_id>\d+)/vote/$ [name='vote'] 

,但你的表單操作點vote/id代替。反向:

<form action="/polls/{{ poll.id }}/vote" method="post"> 

請注意,本教程實際使用不同的方法來生成該URL;它使用:

<form action="{% url 'polls:vote' poll.id %}" method="post"> 

其中url filter爲您生成正確的URL,鑑於polls:vote路由配置和目前的投票對象(poll.id)的ID。

使用{% url routename arguments %}可讓您稍後更改路線,而無需再更正所有模板。

+0

謝謝Martijn。我曾嘗試使用命名空間,但似乎沒有工作,所以我在URL中硬編碼。 – user1786284