yos*_*ssi 75 django reverse get
我正在使用django 1.2并使用urlresolvers反向方法从一个视图转到另一个视图.
url = reverse(viewOne)
Run Code Online (Sandbox Code Playgroud)
我想传递一个get参数,例如
name ='joe'
所以在视图中如果我这样做
def viewOne(request):
request.GET['name']
Run Code Online (Sandbox Code Playgroud)
我会得到
joe
Run Code Online (Sandbox Code Playgroud)
我怎么做 ?
Dan*_*man 135
GET参数与返回的URL无关reverse.只需在最后添加它:
url = "%s?name=joe" % reverse(viewOne)
Run Code Online (Sandbox Code Playgroud)
Ami*_*ari 67
更安全,更灵活的方式:
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
Run Code Online (Sandbox Code Playgroud)
然后你可以使用build_url:
url = build_url('view-name', get={'name': 'joe'})
Run Code Online (Sandbox Code Playgroud)
它采用相同的参数reverse,但提供了一个额外的关键字参数get,您可以将GET参数作为字典放入其中.
cli*_*ime 15
这与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()
Run Code Online (Sandbox Code Playgroud)
用法示例:
>>> build_url('member-list', params={'format': 'html', 'sex': ['male', 'female']})
u'/members/?format=html&sex=male&sex=female'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33591 次 |
| 最近记录: |