gpt4 book ai didi

python - urls.py redirect with URL reversal and parameters——有没有更简单的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 11:56:52 25 4
gpt4 key购买 nike

给定两类实体,我使用以下 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 是有效的。

现在我在同一个数据上引入了多个 View ,所以现在我有像 /category1/1,2,3,4/category2/5,6,7,8/view1/ 这样的 URL和 /category1/1,2,3,4/category2/5,6,7,8/view2/。我想将“旧”URL 重定向到 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),然后替换它们。

很明显,这感觉、看起来、闻起来和尝起来都很古怪。除了引入额外的 View 并完全跳过 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/')),

USE 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 redirect with URL reversal and parameters——有没有更简单的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6361036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com