GET の一部としてクエリ文字列を含む URL を受け取ることができる Django セットアップに取り組んでいます。クエリ文字列で提供されたデータを処理し、そのデータに合わせて調整されているが URL にクエリ文字列が含まれていないページを返すことができるようにしたいと考えています。
通常は を使用reverse()
しますが、この場合の適用方法がわかりません。状況の詳細は次のとおりです。
URL の例: .../test/123/?list_options=1&list_options=2&list_options=3
urls.py
urlpatterns = patterns('',
url(r'test/(P<testrun_id>\d+)/'), views.testrun, name='testrun')
)
ビュー.py
def testrun(request, testrun_id):
if 'list_options' in request.GET.keys():
lopt = request.GET.getlist('list_options')
:
:
[process lopt list]
:
:
:
:
[other processing]
:
:
context = { ...stuff... }
return render(request, 'test_tracker/testview.html', context)
URL の例が処理されると、Django は必要なページを返しますが、URL の末尾にはクエリ文字列が含まれています。不要なクエリ文字列を削除する標準的な方法は、testrun 関数を で返すことreturn HttpResponseRedirect(reverse('testrun', args=(testrun_id,)))
です。ただし、ここでそれを行うと、testrun
関数を介して無限ループが発生します。さらに、元のリクエストにあった list_options データが URL から削除されているため、リダイレクト後も利用できるかどうかはわかりません。
これを回避するにはどうすればよいですか? 無限再帰を避けるために、list_options 変数の解析を別の関数に移動することは理にかなっていることがわかりますが、そのようにすると、リクエストから list_options データが失われるのではないかと心配しています。URL の末尾からクエリ文字列を同時に削除し、必要なページを 1 か所に返すためのきちんとした方法はありますか?
編集:「なぜこれをやりたいのですか?」という質問がいくつかあったため、少し余分な背景を説明します。クエリ。
私がデザインしている Web サイトは、私が取り組んでいるソフトウェアのさまざまなテストの結果を報告することです。この特定のページは、1 つのテストの結果を報告するためのもので、多くの場合、より大きなテスト リストからリンクします。
list_options
配列は、先ほど取得したリスト内の他のテストを指定する方法です。これにより、ドロップダウン メニューに他の関連するテストを入力して、それらを簡単に切り替えることができます。
そのため、15 ~ 20 個の異なる値を簡単に渡して巨大な URL を作成することになる可能性がありますが、これは避けたいと思います。このページは、URL で他のテストを提案しない場合、問題のメニューを埋めるための他のテストのデフォルト セットを持つように設計されているため、list_options
. ユーザーが直接ページに戻りたい場合、リスト内の他のテストは気にしないので、その情報が利用できなくても問題ありません。