リダイレクトにGET変数を追加することはできますか? (私のurls.pyを変更する必要はありません)
もし私がやればredirect('url-name', x)
HttpResponseRedirect('/my_long_url/%s/', x)
代わりにHttpResponseRedirect('/my_long_url/%s/?q=something', x)
を使用しても問題はありませんが、疑問に思っています...
リダイレクトにGET変数を追加することはできますか? (私のurls.pyを変更する必要はありません)
私はこれを行う方法を知りませんなしurls.py
を変更します。
代わりにHttpResponseRedirect( '/ my_long_url /%s /?q = something'、x)を使用して不平を言うのではなく、ただ疑問に思っています...
これを簡単にするために、薄いラッパーを作成することもできます。言う、custom_redirect
def custom_redirect(url_name, *args, **kwargs):
from Django.core.urlresolvers import reverse
import urllib
url = reverse(url_name, args = args)
params = urllib.urlencode(kwargs)
return HttpResponseRedirect(url + "?%s" % params)
これは、ビューから呼び出すことができます。例えば.
return custom_redirect('url-name', x, q = 'something')
# Should redirect to '/my_long_url/x/?q=something'
リダイレクトはHttpResponseRedirect
オブジェクトを返すだけなので、次のように変更できます。
response = redirect('url-name', x)
response['Location'] += '?your=querystring'
return response
Djangoからurlencodeをインポートできます。
from Django.utils.http import urlencode
get_args_str = urlencode({'q': 'something'})
または、リクエストを開始してから、解析されていないパラメータ文字列を使用することもできます
get_args_str = request.META['QUERY_STRING']
HttpResponseRedirect('%s?%s' % (url, get_args_str))
DjangoのRedirectView
クラスには組み込みのクラス属性query_string
があり、これをオーバーライドまたはas_view
に渡すことができることは注目に値します。 True
に設定すると、query_string
はリダイレクトでクエリ文字列を保持します。たとえば、urls.py
に次のように入力できます。
path('example-redirect/',
RedirectView.as_view(url='https://example.com', query_string=True),
name='example_redirect')