with urls reverse_lazy queryset django get reverse

urls - ¿Cómo paso los parámetros GET usando django urlresolvers reverse



django urls (4)

Estoy usando django 1.2 y yendo de una vista a otra usando el método inverso de urlresolvers.

url = reverse(viewOne)

y quiero pasar un parámetro get, por ejemplo

name = ''joe''

para que en la vista Uno si lo hago

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

Conseguiré

joe

Cómo puedo hacer eso ?


Esto es muy similar a la solución de Amir pero maneja las listas también.

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

Ejemplo de uso:

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


Los parámetros GET no tienen nada que ver con la URL devuelta por reverse . Solo agrégalo al final:

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


Perdón por la corrección retrasada en esto.

Si bien las dos respuestas manejan muy bien la tarea requerida, creo que una simple función para urlencodear un diccionario es la forma más flexible de hacerlo:

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


Una manera más segura y más flexible:

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

entonces puedes usar build_url :

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

que toma los mismos argumentos que en reverse , pero proporciona un argumento de palabra clave adicional donde puede poner sus parámetros GET como un diccionario.