Skip to main content
 首页 » 编程设计

python之Django:根据表单中的用户输入重定向到另一个网址

2024年08月22日28zhwl

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

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

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

表单.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'), 
] 

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

请您参考如下方法:

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

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