0

私はDjangoとHTMLを初めて使用し、フォームから派生したデータのリストをHttpResponseRedirectページに表示しようとしています。私はDjangoAPIを読んでいますが、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
4

1 に答える 1

2

あなたが欲しいのはDjangoのrender_to_responseショートカットだと思います。最初の引数は使用するhtmlテンプレートであり、2番目の引数はそのテンプレートに渡す値のディクショナリです。

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

2番目の引数は、テンプレートに渡したい値のディクショナリであることに注意してください。私が書いた方法では、4つの値(、、、)を渡していchosenますが、必要な数だけ含めることができます。companiesstartend

次にresults.html、Templatesディレクトリ(ファイルの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テンプレート構文では、二重中括弧を使用{{}}して、テンプレートに渡された変数を表示します。

このアプローチではURLは変更されないことに注意してください。これを行う必要がある場合は、これを見てみてください

于 2012-09-17T18:30:01.667 に答える