2011-03-29 41 views
26

這是我有:django - 視圖需要參數時進入窗體動作參數的內容?

myview.py與需要一個參數user一個觀點:

def myview(request, user): 
    form = MyForm(request.POST) 
    .... 
    return render_to_response('template.html',locals(), context_instance=RequestContext(request)) 

user獲得通過的網址通過。

urls.py

... 

urlpatterns += patterns('myview.views', 
    (r'^(?P<user>\w+)/', 'myview'), 
) 

... 

我也有一個template.html與形式:

<form name="form" method="post" action="."> 
... 
</form> 

在表單操作參數善有善報如果myview功能需要一個參數?

現在我有action="."。我問的原因是因爲當我填寫表單In(templates.html)並單擊提交按鈕時,我完全沒有看到從該表單傳遞的字段值。這幾乎就像我點擊提交按鈕時傳遞一個空表單。有任何想法嗎?謝謝!

回答

16

您正在發佈到同樣的視圖,也服務於表單。所以起初,這個觀點被稱爲並服務於這個形式。當您發佈表單時,會調用相同的視圖,但這次是處理表單。這就是爲什麼這個動作是空的。

+0

我會看看這個。說得通。感謝您的答覆。 – avatar 2011-03-30 15:37:28

+0

如果是這種情況,我應該怎麼做才能避免它? – avatar 2011-03-30 18:24:57

+3

擺脫行動中的點=「。」。然後表單將被髮布到相同的視圖並進行處理。你想避免什麼?如果您想發佈到其他視圖,則可以將該路徑放在行動中而不是將其留空 – 2011-03-30 18:28:50

5

它不應該需要任何東西。假設你在以下網址:

www.yoursite.com/users/johnsmith/ 

你的形式應該是:

<form name="form" method="post" action=""> 

在這一點上,你已經在myview與用戶johnsmith。您的視圖應該像下面這樣:

if request.method == 'POST': 
    form = MyForm(request.POST) 
    if form.is_valid(): 
     # you should be able to extract inputs from the form here 
else: 
    form = MyForm() 
+2

如果action屬性爲空,則某些瀏覽器(例如,最近的Chrome構建版)將無法發佈。 – shacker 2013-12-22 00:05:03

+0

@shacker也許'action =「。」'足以解決chrome問題? – Paolo 2014-03-02 00:06:00

21

如果你要明確設置的動作,假設你在你的模板具有可變用戶名

<form name="form" method="post" action="{% url myview.views username %}"> 

,或者你可以爲指定一個名稱您的urls.py中的網址,以便您可以參考它:

# urls.py 
urlpatterns += patterns('myview.views', 
    url(r'^(?P<user>\w+)/', 'myview', name='myurl'), # I can't think of a better name 
) 

# template.html 
<form name="form" method="post" action="{% url myurl username %}"> 
2

您可以使用request.path,這在大多數情況下都可以使用。

相關問題