2016-04-21 82 views
0

我正在學習Django並學習它。我不完全瞭解當我從模板發佈數據時發生了什麼。我有一個模型類Person定義表中的字段。我正在使用表單顯示有關某人的信息,並且我可以查看某個人的信息,但我無法保存相同的信息。當我點擊提交時,我得到錯誤頁面未找到。我不明白爲什麼人會在url中追加兩次。這有點令人困惑。我希望有人能幫助我理解我的錯在哪裏。 請求URL:http://devops:8000/cms/person/person 這裏是我的代碼:django post方法在url中傳遞參數後不工作

forms.py:

class PersonView(ModelForm): 
    class Meta: 
     model = Person 
     fields = ['FirstName','LastName','Address'] 

urls.py:

urlpatterns = patterns('cms', 
    url(r'^workflowdetail/(?P<id>\d+)$', 'views.person',name='cms'), 
) 

views.py:

def person(request, id): 
    person= get_object_or_404(Person, pk=id) 
    if request.method == 'GET': 
     form = Person(instance=person) 
    else: 
     form = Person(request.POST,instance=person) 
     if form.is_valid(): 
      form.save() 
    return render(request, 'person.html', {'form': form, 'id': id}) 

人。 html

<form action="person" role="form" method="post"> 
    {% bootstrap_form form %} 
</form> 

回答

2

您的action的表單不正確。當您使用person時,這並不意味着它會使用person視圖,這意味着表單將被提交到相對網址person

您可以使用url標籤,以獲得正確的網址:

<form action="{% url 'cms' id %}" role="form" method="post"> 

現在,我會盡力解釋,其中在URL中的雙person/person來自:

如果你在開始,說,/cms/person/,那麼相關的網址person就是/cms/person/person/。如果您從/cms/person/1開始,那麼相關網址person也是/cms/person/person/。由於您沒有此模式的網址格式,因此會出現404錯誤。

但是,如果你開始在/cms/person/1/,那麼相對URL person/cms/person/1/person/

出於這個原因,你可能會發現很容易在你的網址,例如使用斜線

r'^workflowdetail/(?P<id>\d+)/$ 

如果你這樣做,你實際上並不需要在你的表單標籤action屬性都沒有。

<form role="form" method="post"> 
+0

我以前試過,我得到這個錯誤。 NoReverseMatch:未找到參數'(u'2',)'和關鍵字參數'{}'的'workflow'。嘗試了0個模式:[] – hermy67

+1

你必須嘗試一些稍微不同的東西 - 我的代碼不會導致包含'工作流程'的錯誤。請注意,我使用''cms''是因爲在url模式中有'name ='cms''。 – Alasdair

+1

這是我做的複製錯誤。你的解決方案是正確的,並工作我無法使用原始代碼並嘗試對其進行編輯。但你的解決方案是完美的。我使用了錯誤的名稱而不是cms,現在它可以工作。 – hermy67