Ich verwende Django 1.2 und gehe mit der umgekehrten Methode von urlresolvers von einer Ansicht zur nächsten.
url = reverse(viewOne)
und ich möchte zum Beispiel einen get-Parameter übergeben
name = 'joe'
so dass in der viewOne wenn ich das tue
def viewOne(request):
request.GET['name']
ich werde bekommen
joe
wie mache ich das ?
Antworten:
GET-Parameter haben nichts mit der von zurückgegebenen URL zu tun
reverse
. Fügen Sie es einfach am Ende hinzu:url = "%s?name=joe" % reverse(viewOne)
quelle
Ein sicherer und flexiblerer Weg:
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
dann können Sie verwenden
build_url
:url = build_url('view-name', get={'name': 'joe'})
Dies verwendet dieselben Argumente wie
reverse
, bietet jedoch ein zusätzliches Schlüsselwortargument,get
in das Sie IhreGET
Parameter als Wörterbuch einfügen können.quelle
django.utils.http.urlencode
Funktion von Django ist möglicherweise vorzuziehen, da es sich um eine "Version der Funktion urllib.urlencode () von Python handelt, die mit Unicode-Zeichenfolgen arbeiten kann": docs.djangoproject.com/de/1.10/ref/utils/…Dies ist der Lösung von Amir 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'
quelle
sex=male&sex=female
? Ich denke, es sollte sein&sex[]=female&sex[]=female
(beachten Sie das zusätzliche[]
), ein GET-Anforderungsarray zu sein[]
sind eine PHP-Konvention.Entschuldigen Sie die verspätete Korrektur.
Während beide Antworten hier die erforderliche Aufgabe zu gut bewältigen, denke ich, dass nur eine einfache Funktion zum Urlencode eines Wörterbuchs die flexibelste Möglichkeit ist, dies zu tun:
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('&')
quelle
#
,?
) oder jede Art von URL-Encoding: en.wikipedia.org/wiki/Percent-encoding