webentwicklung-frage-antwort-db.com.de

Wie übergebe ich GET-Parameter mit Django urlresolvers reverse

Ich verwende Django 1.2 und gehe mit der umgekehrten Methode urlresolvers von einer Ansicht zur anderen.

url = reverse(viewOne)

und ich möchte zum Beispiel einen get-Parameter übergeben

name = 'joe'

so dass in der viewOne wenn ich es tue

def viewOne(request):
    request.GET['name']

Ich werde bekommen

joe

wie mache ich das ?

73
yossi

GET-Parameter haben nichts mit der von reverse zurückgegebenen URL zu tun. Fügen Sie es einfach am Ende hinzu:

url = "%s?name=joe" % reverse(viewOne)
132
Daniel Roseman

Sicherer und flexibler:

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

dann kannst du build_url:

url = build_url('view-name', get={'name': 'joe'})

diese Methode verwendet dieselben Argumente wie reverse, bietet jedoch ein zusätzliches Schlüsselwortargument get, in das Sie Ihre GET -Parameter als Wörterbuch einfügen können.

65
Amir Ali Akbari

Dies ist der Amir-Lösung sehr ähnlich, behandelt jedoch auch Listen.

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

Anwendungsbeispiel:

>>> build_url('member-list', params={'format': 'html', 'sex': ['male', 'female']})
u'/members/?format=html&sex=male&sex=female'
15
clime