programing tip

django urlresolvers reverse를 사용하여 GET 매개 변수를 전달하는 방법

itbloger 2020. 10. 18. 08:38
반응형

django urlresolvers reverse를 사용하여 GET 매개 변수를 전달하는 방법


django 1.2를 사용하고 있으며 urlresolvers reverse 메서드를 사용하여 한 뷰에서 다른 뷰로 이동합니다.

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.core.urlresolvers 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.


이것은 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'

지연된 수정에 대해 죄송합니다.

While both the answers here handles the required task too well, i think just a simple function to urlencode a dictionary is the most flexible way of doing this:

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('&')

참고URL : https://stackoverflow.com/questions/9585491/how-do-i-pass-get-parameters-using-django-urlresolvers-reverse

반응형