Django:根据表单中的用户输入重定向到另一个URL

时间:2016-08-25 04:48:56

标签: python django forms

我正在尝试在查看Django表单文档以及Django表单教程(第4部分)中的部分以及几个SO线程之后,实现非常简单且没有运气的东西。

我有一个主页,其中有一个表单,用户应该能够输入某个篮球运动员的名字。当他们点击提交时,它应该重定向到我的另一个页面,即player_stats页面,它将显示有关该播放器的一些信息。理想情况下,我也希望在player_stats页面上提供相同的表单,这样用户就可以从一个玩家到另一个玩家,而无需回到主页之间。

我应该添加一个应用程序的名称,其中所有这些文件都位于“桌面”中。

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时才会发生不取决于提交的表单的内容是什么。我不能来这里的是什么?

1 个答案:

答案 0 :(得分:3)

您应该使用form.cleaned_data而不是form.name中指定的名称。 所以你的代码应该是

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