2016-08-25 9 views
1

DjangoフォームのドキュメンテーションとDjangoチュートリアルのセクション(パート4)のセクションを参照して、本当に簡単なことを実現したいと思っています。いくつかのSOスレッド。Django:フォームのユーザ入力に基づいて別のURLにリダイレクト

私は、ユーザーがいくつかのバスケットボール選手の名前を入力できる形式のホームページを持っています。彼らが提出すると、他のページ、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にあるので、ドキュメントに示す例では、私の状況とは若干異なっていると思うことばかりフォームが有効で、urlが送信されたフォームの内容に依存しない場合に発生します。私はここにいないのですか?

+2

でなければなりません。この方法では、リダイレクトも必要ありません。 – Selcuk

答えて

3

form.cleaned_dataで指定された名前はform.nameではありません。 だからあなたのコードを使用すると、そのビューにフォームのアクションポイント以降に `player_stats`でいることをやるべきことながら、あなたはあなたの` index`ビューでポストイベントを処理している

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

残念ながら、これは私が持っていたいくつかの問題のほんの1つだったようです。私はあなたの答えと@Selcukのコメントに基づいて私のコードにいくつかの編集を加えましたが、それはまだ不幸です。 – TeaCup

関連する問題