我是Django和HTML的新手,我正在尝试在HttpResponseRedirect页面上显示从表单派生的数据列表。我一直在阅读Django API,但我仍然不确定如何使用HttpResponse()和HttpResponseRedirect()。
截至目前,我了解response = HttpResponse()使HttpResponse对象和HttpResponseRedirect('results')将浏览器重定向到新的html模板页面。 我不知道如何编写results.html以在我的浏览器上显示。
我需要有关如何编写HTML页面的帮助。
我还需要有关如何将数据列表传递到该html页面的帮助。
我也可以在表单所在的同一个html页面上显示列表,而不是加载新页面。
当前代码: def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
chosen = []
if form.is_valid():
strt = time.time()
form = form.cleaned_data
parameters = organize(form)
print 'input organized'
chosen, companies = multiple(parameters)
end = time.time()
pp.pprint(companies)
print 'companies matching search filters: ' , len(companies)
print 'total time: ' , str(end-strt)
response = HttpResponse(chosen)
return HttpResponseRedirect('results') # Redirect after POST
答案 0 :(得分:2)
我认为你想要的是Django的render_to_response捷径。第一个参数是要使用的html模板,第二个参数是要传递给该模板的值字典。
在views.py文件的顶部,包含:
from django.shortcuts import render_to_response
并修改您的代码:
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
chosen = []
if form.is_valid():
strt = time.time()
form = form.cleaned_data
parameters = organize(form)
print 'input organized'
chosen, companies = multiple(parameters)
end = time.time()
pp.pprint(companies)
print 'companies matching search filters: ' , len(companies)
print 'total time: ' , str(end-strt)
return render_to_response('results.html', {'chosen':chosen,'companies':companies,'start':start,'end':end}) # Redirect after POST
请注意,第二个参数是您要传递给模板的值的字典。按照我写的方式,您传递了4个值(chosen
,companies
,start
,end
),但您可以包含尽可能多的值你喜欢。
然后在Templates目录中创建一个名为results.html
的文件(在TEMPLATE_DIRS
文件的settings.py
变量中指定)。它可能看起来像这样:
<!DOCTYPE html>
<body>
<h1>Results</h1>
<p>Chosen: {{chosen}}</p>
<p>Companies: {{companies}}</p>
<p>Start: {{start}}</p>
<p>End: {{end}}</p>
</body>
Django模板语法使用双花括号{{}}
来显示传递给模板的变量。
请注意,此方法不会更改网址。如果您需要这样做,请尝试查看this。