私はdjango1.2を使用しており、urlresolversのリバースメソッドを使用してあるビューから別のビューに移動しています。
url = reverse(viewOne)
たとえば、getパラメータを渡したい
名前= 'ジョー'
そうすればviewOneで
def viewOne(request):
request.GET['name']
私は取得します
joe
それ、どうやったら出来るの ?
私はdjango1.2を使用しており、urlresolversのリバースメソッドを使用してあるビューから別のビューに移動しています。
url = reverse(viewOne)
たとえば、getパラメータを渡したい
名前= 'ジョー'
そうすればviewOneで
def viewOne(request):
request.GET['name']
私は取得します
joe
それ、どうやったら出来るの ?
回答:
GETパラメータは、によって返されるURLとは何の関係もありませんreverse
。最後に追加するだけです:
url = "%s?name=joe" % reverse(viewOne)
より安全で柔軟な方法:
import urllib
from django.urls import reverse
def build_url(*args, **kwargs):
get = kwargs.pop('get', {})
url = reverse(*args, **kwargs)
if get:
url += '?' + urllib.urlencode(get)
return url
その後、使用することができますbuild_url
:
url = build_url('view-name', get={'name': 'joe'})
これはと同じ引数を取りますが、パラメータを辞書として入れることができるreverse
追加のキーワード引数を提供しget
ますGET
。
django.utils.http.urlencode
関数は、「Unicode文字列を操作できるPythonのurllib.urlencode()関数のバージョン」であるため、望ましい場合があります。docs.djangoproject.com
これはAmirのソリューションと非常に似ていますが、リストも処理します。
from django.core.urlresolvers import reverse
from django.http import QueryDict
def build_url(*args, **kwargs):
params = kwargs.pop('params', {})
url = reverse(*args, **kwargs)
if not params: return url
qdict = QueryDict('', mutable=True)
for k, v in params.iteritems():
if type(v) is list: qdict.setlist(k, v)
else: qdict[k] = v
return url + '?' + qdict.urlencode()
使用例:
>>> build_url('member-list', params={'format': 'html', 'sex': ['male', 'female']})
u'/members/?format=html&sex=male&sex=female'
sex=male&sex=female
ですか?GETリクエスト配列である必要があると思います&sex[]=female&sex[]=female
(追加に注意してください[]
)
[]
はPHPの規則です。
これの修正が遅れてすみません。
ここでの両方の答えは必要なタスクをうまく処理しますが、辞書をurlencodeする単純な関数がこれを行う最も柔軟な方法だと思います。
import urllib
def getify(dic):
st = ''
for K, V in dic.items():
K = urllib.parse.quote(str(K))
if isinstance(V, list):
for v in V:
st += K + '=' + urllib.parse.quote(str(v)) + '&'
else:
st += K + '=' + urllib.parse.quote(str(V)) + '&'
return st.rstrip('&')