我试图反转一个命名的URL,并在其中包含一个querystring。基本上,我已经修改了登录函数,我想在其中发送?next=
。
我现在在做的是:reverse(name) + "?next=" + reverse(redirect)
我想做的是:reverse(name, kwargs = { 'next':reverse(redirect) } )
登录页面的URL(仅作为示例)如下所示:url(r'^login/', custom_login, name = 'login'),
那么,我如何修改这整个事情(或调用它),以包括下一个,而不必连接它?这感觉像一个不确定的解决方案在最好的。
6条答案
按热度按时间cigdeys31#
您无法在url confs中捕获GET参数,因此您的方法是正确的。
我通常更喜欢字符串格式,但它是一样的。
"%s?next=%s" % (reverse(name), reverse(redirect))
http://docs.djangoproject.com/en/dev/topics/http/urls/#what-the-urlconf-searches-against
URLconf以普通的Python字符串形式搜索所请求的URL,其中不包括GET或POST参数,也不包括域名。
2ledvvac2#
我只是把我自己的效用函数和问题中问的一样:
monwx1rj3#
我认为最好 Package Django的reverse方法来公开这个API。下面是一些简单的代码:
把这段代码放到某个只依赖于Django的实用程序或普通应用程序中,然后不导入django.core.urlresolvers.reverse,而是导入myproject.myutils.urlresolvers.reverse
hwamh0ep4#
我也被同样的问题困扰,发现了这个link。显然,你的解决方案设计得很不错。根据票上的讨论,Django不会提供这个功能。
您可以使用urlobject或furl。
另一种方法是使用您自己的函数来完成此操作,这种方法更简洁。
在问题的情况下,可以按以下方式使用
bprjcwpo5#
为了保持查询的可选性,您可以将Django的reverse函数 Package 在您自己的函数中,该函数也处理查询,允许对reverse函数进行其他适当的处理。
创建适当的请求-请注意,
query_kwargs
是可选的,因此您不必发送它在
utils.py
文件(基于docs)中(1.11及更高版本?)在网址配置
urls.py
中并获得对查询的访问权限
uubf1zoe6#
采用@chrisFrisina的想法,稳健的解决方案是: