python – urls.py重定向与URL反转和参数 – 有更简单的方法吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – urls.py重定向与URL反转和参数 – 有更简单的方法吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1810字,纯文字阅读大概需要3分钟。
内容图文
给定两类实体,我选择了一些具有以下URL定义的交叉产品集:
url(r"^category1/(?P<category1>([0123456789]+,?)+)/category2(?P<category2>([0123456789]+,?)+)/$", view, {}, name="cross")
所以基本上像/ category1 / 1,2,3,4 / category2 / 5,6,7,8 /这样的URL是有效的.
现在我在相同的数据上引入了几个视图,所以现在我有像/ category1 / 1,2,3,4 / category2 / 5,6,7,8 / view1 /和/ category1 / 1,2,3这样的URL, 4 /类别2 / 5,6,7,8- /视图2 /.我想将“旧”网址重定向到view1.我没有找到比这更容易的东西:
url(r"^category1/(?P<category1>([0123456789]+,?)+)/category2(?P<category2>([0123456789]+,?)+)/$",
redirect_to, {
'url': lazy(lambda: reverse(
'cross_view1',
kwargs={
'category1': '111111',
'category2': '222222',
}
).replace('111111', '%(category1)s') .replace('222222', '%(category2)s'), str)(),
name="cross"}
这里的要点是我想在URL中重用我匹配的组,但是,我不能将它们作为kwargs给redirect_to,因为它们不会被插值,也不能在URL中放入逐字格式,因为它必须匹配我的正则表达式(以逗号分隔的数字ID).所以我介绍一些独特的ID(在这种情况下为111111和222222)并在之后替换它们.
显然,这种感觉,外观,气味和味道非常黑客.有没有更简洁的方法来做到这一点,除了引入一个额外的视图和完全跳过redirect_to?
解决方法:
你有一些选择.你可以使用RedirectView,但我无法让它反转url,因为它看起来像在urlpatterns加载之前运行.您可以像这样使用它,定制它以在您的项目中使用:
from django.views.generic import RedirectView
将其添加到您的urlpatterns:
url(r'^(?P<location_id>\d+)/$', RedirectView.as_view(url='/statistics/dailyreport/%(location_id)s/')),
使用LAMBDA:这应该适用于django的大多数版本,我在1.6.5中使用它:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
urlpatterns = patterns('',
....
url(r'^(?P<location_id>\d+)/$', lambda x, location_id: HttpResponseRedirect(reverse('dailyreport_location', args=[location_id])), name='location_stats_redirect'),
....
)
内容总结
以上是互联网集市为您收集整理的python – urls.py重定向与URL反转和参数 – 有更简单的方法吗?全部内容,希望文章能够帮你解决python – urls.py重定向与URL反转和参数 – 有更简单的方法吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。