如何编写一个HTML文件,显示使用Django传递给它的HttpResponse对象

时间:2012-09-04 05:55:46

标签: django-views httpresponse http-redirect

我是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

1 个答案:

答案 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个值(chosencompaniesstartend),但您可以包含尽可能多的值你喜欢。

然后在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