我正在尝试在查看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时才会发生不取决于提交的表单的内容是什么。我不能来这里的是什么?
答案 0 :(得分:3)
您应该使用form.cleaned_data
而不是form.name
中指定的名称。
所以你的代码应该是
return HttpResponseRedirect(reverse('desk:player_stats',
args=(form.cleaned_data['name'],)))