django 1.2를 사용하고 있으며 urlresolvers reverse 메서드를 사용하여 한 뷰에서 다른 뷰로 이동합니다.
url = reverse(viewOne)
예를 들어 get 매개 변수를 전달하고 싶습니다.
이름 = '조'
그래서 viewOne에서
def viewOne(request):
request.GET['name']
나는 얻을 것이다
joe
어떻게해야합니까?
django 1.2를 사용하고 있으며 urlresolvers reverse 메서드를 사용하여 한 뷰에서 다른 뷰로 이동합니다.
url = reverse(viewOne)
예를 들어 get 매개 변수를 전달하고 싶습니다.
이름 = '조'
그래서 viewOne에서
def viewOne(request):
request.GET['name']
나는 얻을 것이다
joe
어떻게해야합니까?
답변:
더 안전하고 유연한 방법 :
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
함수는 "유니 코드 문자열에서 작동 할 수있는 Python의 urllib.urlencode () 함수 버전"이므로 더 바람직 할 수 있습니다. docs.djangoproject.com/en/1.10/ref/utils/…
이것은 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('&')
#
, ?
) 또는 퍼센트 인코딩 모든 종류의 : en.wikipedia.org/wiki/Percent-encoding