2016-08-25 70 views
1

基於用戶輸入的另一個網址我正在嘗試在回顧Django表單文檔以及Django教程表單(第4部分)中的部分之後實現一些非常簡單並且沒有運氣的操作,以及幾個SO線程。Django:重定向到基於用戶輸入的

我有一個主頁,其中有一個窗體,用戶應該能夠輸入一些籃球運動員的名字。當他們點擊提交時,它應該重定向到我的其他頁面,即player_stats頁面,該頁面將顯示關於該玩家的一些信息。理想情況下,我還希望在player_stats頁面上提供相同的表單,以便用戶可以從玩家到玩家,而不必回到主頁之間。

我應該添加所有這些文件所在的應用程序的名稱「desk」。

forms.py

from django import forms 

class NameForm(forms.Form): 
    name = forms.CharField(label='Name', max_length=100) 

的index.html

<div> HOME PAGE </div> 
<form action="{% url 'player_stats' name %}" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Go"/> 
</form> 

views.py

def index(request): 
template = loader.get_template('desk/index.html') 
return HttpResponse(template.render(request)) 

def player_stats(request, name): 
    # if this is a POST request we need to process the form data 
    if request.method == 'POST': 
    # create a form instance and populate it with data from the request: 
     form = NameForm(request.POST) 
     # check whether it's valid: 
     if form.is_valid(): 
      # process the data in form.cleaned_data as required 
      # redirect to a new URL: 
      name = form.cleaned_data['name'] 

    # if a GET (or any other method) we'll create a blank form 
    else: 
     form = NameForm() 

    template = loader.get_template('desk/player_stats.html') 
    context = get_player_stats_context(tag) 

    return HttpResponse(template.render(context, request)) 

urls.py

urlpatterns = [ 
    url(r'^$', views.index, name='index'), 
    url(r'^(?P<name>([\s\S]+))/player_stats/$', views.player_stats, name='player_stats'), 
] 

我想在文檔中顯示的例子來自於我的情況略有不同,因爲模板似乎總是由視圖提供了一些上下文對象或重定向是硬編碼網址,只是如果表單有效且URL不依賴於提交表單的內容,則會發生。我不在這裏?

+2

您在處理事件後在'index'視圖,而你應該做的是在你的'player_stats'因爲你的表單動作指向了這一觀點。這樣你就不需要重定向。 – Selcuk

回答

3

您應該使用form.cleaned_data中給出的名稱而不是form.name。 所以,你的代碼應該是

return HttpResponseRedirect(reverse('desk:player_stats', 
         args=(form.cleaned_data['name'],))) 
+0

不幸的是,它看起來像只是我遇到的幾個問題之一。我根據你的回答和@Selcuk的評論對我的代碼進行了一些編輯,但它仍然不滿意。 – TeaCup

相關問題