Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:根据表单中的用户输入重定向到另一个url_Python_Django_Forms - Fatal编程技术网

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

Python Django:根据表单中的用户输入重定向到另一个url,python,django,forms,Python,Django,Forms,在回顾了Django表单文档以及Django表单教程(第4部分)中关于表单的部分,以及其他一些线程之后,我正在尝试实现一些非常简单但没有运气的东西 我有一个主页,其中有一个表单,用户应该能够输入一些篮球运动员的名字。当他们点击提交时,它应该重定向到我的另一个页面,玩家统计页面,该页面将显示该玩家的一些信息。理想情况下,我也希望在player_stats页面上提供相同的表单,这样用户就可以从一个玩家转到另一个玩家,而不必在其间返回主页 我应该加上,所有这些文件所在的应用程序的名称 forms.py

在回顾了Django表单文档以及Django表单教程(第4部分)中关于表单的部分,以及其他一些线程之后,我正在尝试实现一些非常简单但没有运气的东西

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

我应该加上,所有这些文件所在的应用程序的名称

forms.py

from django import forms

class NameForm(forms.Form):
    name = forms.CharField(label='Name', max_length=100)
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))
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<name>([\s\S]+))/player_stats/$', views.player_stats, name='player_stats'),
]
index.html

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

from django import forms

class NameForm(forms.Form):
    name = forms.CharField(label='Name', max_length=100)
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))
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^(?P<name>([\s\S]+))/player_stats/$', views.player_stats, name='player_stats'),
]
urlpatterns=[
url(r'^$',views.index,name='index'),
url(r'^(?P([\s\s]+)/player_stats/$”,views.player_stats,name='player_stats'),
]

我猜文档中显示的示例与我的情况略有不同,因为模板似乎总是由视图提供一些上下文对象,或者重定向到一个硬编码的url,如果表单有效并且url不依赖于提交表单的内容,则会发生这种情况。我这里没有得到什么?

您应该使用
表单中给出的名称。数据
不是
表单。名称
。
所以你的代码应该是

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

您正在
索引
视图中处理post事件,而您应该在
玩家统计数据
中处理post事件,因为表单操作指向该视图。这样你也不需要重定向。不幸的是,这似乎只是我遇到的几个问题之一。我根据你的回答和@Selcuk的评论对我的代码做了一些编辑,但仍然不满意。