2016-12-27 6 views
0

をレンダリングGET render()からGETパラメータを取得します。パスは、Djangoの者によるパラメータは、私はいくつかのDjangoのビューを通過しています日付フィルタを持っている()ショートカット

reverse()でこれを行う方法はthis answerでしたが、render()はURLを直接受け取りません。

私はそれを渡すrequestに再度追加する必要があると思われますが、これを行う方法がわかりません。

+0

「フォワードスルー(render)()」とはどういう意味ですか? –

+0

私がレンダリングした後、URLに '?date = 2016-12-30'を末尾に入れてほしい – 43Tesseracts

+0

urls.pyファイルの関連部分のスニペットも貼り付けてください。 – 2ps

答えて

1

私はあなたが誤解していると思いますrender。生活の中でrenderの仕事は、HTMLテンプレートとコンテキスト辞書からcontent to the userHttpResponseを返すことです:

は、指定されたコンテキスト辞書 で特定のテンプレートを組み合わせて、そのレンダリングされたテキストでHttpResponseオブジェクトを返します。対照的に

redirectは新しいURL(即ち、そうGETパラメータが含まれることができる)にユーザーをリダイレクトします。したがって、renderを使用する場合は、手動でGETパラメータを保存する必要があります。

from datetime import date, datetime 

date_query = request.session.get('date') 
if not date_query: 
    date_query = request.GET.get("date", default_event_date()) 
    if not isinstance(date_query, date): 
     date_query = datetime.strptime(date_query, "%Y-%m-%d").date() 
    request.session['date'] = date_query 

d = date_query 

そして、これは、あなたがそれに続くルートやビューへのあなたのGETパラメータを「繰り越し」ようになる:もちろん、あなたのような何かを行うことによって、ユーザのセッションにdateを追加することでこの問題を回避することができます。

+0

どうすれば 'GET'パラメータを手動で保存できますか?あまりにも言葉の問題のために謝罪が、それは私が意味したものです。 – 43Tesseracts

+0

この特定のレンダリングでは、GETパラメータを変更しないでください。それらはレンダリングされたページから次のページへのページターン時にのみ変更する必要があります。したがって、GETパラメータを保持するということは、( 'request.GET.urlencode'を使用して)クエリ文字列をフォーマットし、' date'パラメータを必要とする各URLに追加することを意味します。 – 2ps

+0

セッション提案をありがとう。とにかくこれはもっと良い解決策かもしれないと思います。私はそれを試してみるつもりです。 – 43Tesseracts

関連する問題