2016-08-25 42 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