2013-08-29 21 views
1

我迷失在這裏。我對django相當陌生,也許這是一個新手問題。 我有一個非常簡單的列表視圖,顯示在數據庫中的記錄和創建視圖來添加這些對象:當表單動作設置爲「。」時,Django將重定向到不同的視圖。

@login_required 
def list_view(request): 
    objects = Foo.objects.all() 
    ctx = {'objects': objects} 
    return render_to_response('main/foos.html', ctx, 
           context_instance=RequestContext(request)) 
@login_required 
def create_view(request): 
    if request.method == 'POST': 
     form = FooForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('/foos/') 
    else: 
     form = FooForm() 
    ctx = {'form': form} 
    return render_to_response('main/foo_form.html', ctx, 
           context_instance=RequestContext(request)) 

的foo_form.html模板看起來是這樣的:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Club</title> 
    </head> 
    <body> 
     <form action="." method="post"> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit" value="Confirm/> 
     </form> 
    </body> 
</html> 

網址設置:

urlpatterns = patterns('', 
         url(r'^foos/$', 'list_view'), 
         url(r'^foos/new$', 'create_view'), 
         ) 

當我輸入URL「localhost:8000/foos/new」時,創建視圖按預期獲取GET請求。問題是,在提交表單,我重定向到列表(使用調試器,我發現的要求越來越向list_view),甚至當表單動作設置爲「」 我在做什麼錯? create_view視圖應該接收POST請求。 任何幫助表示讚賞!同樣,我很抱歉,如果這是一個新手的問​​題

回答

2

您還沒有第二個URL

url(r'^foos/new$', 'create_view') 

這樣完成了正則表達式字符串 「」將使用當前的URL來發布表單。 Django採用URL'/ foos/new'並將其與正則表達式匹配。它匹配第一個正則表達式,因爲它找到了'foos'的匹配,所以進入'list_view'。只要正確完成你的正則表達式,它就可以工作。

url(r'^foos/new/$', 'create_view') 
+0

應該不是問題。默認情況下,django將結尾符號放在那裏。 –

+0

@Games Brainiac - 不正確,Django不會將正斜槓添加到正則表達式中,只會將url自身添加到正則表達式中。我的回答是正確的,很容易在我的開發環境中複製。添加尾部斜線修復了問題。 – professorDante

+0

是的,你說得對.. – Alvaro

1

離開表單行動「」張貼到相同的URL,而不是一個。

因此,在這種情況下

<form action="" method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="Confirm/> 
    </form> 
+0

它的工作!我知道這必須是愚蠢的......你能向我解釋什麼是「。」那麼呢?謝謝! – Alvaro

+0

老實說,我認爲它應該有工作,有可能嘗試改變富/新網址'URL(R「^ FOOS /新/ $」,「create_view」),' –

+1

另外,作爲一個小技巧添加一個名字,你的網址爲所以'URL(R '^ FOOS/$', 'list_view',名字= 'fooname'),'意味着你可以做'返回重定向( 'fooname')'所以如果你改變/富/ URL你不」 t需要更改其餘代碼以匹配 –

相關問題