动态301旧网址到新网址模式?

时间:2010-09-30 23:28:32

标签: django

我更新了我的网址格式:

(r'^(?P<slug>[-\w]+)/$', 'bugs.views.bug_detail'),

(r'^issue/(?P<id>[0-9]+)/(?P<slug>[-\w]+)/$', 'bugs.views.bug_detail'),

所以我现在依赖于URL中的主键,因为slug可以随时更改。我有大约40-50个链接,我需要301蜘蛛/爬虫。

在Django中执行301的最简单方法是什么,而不必在Apache conf中对Redirect 301进行硬编码?

2 个答案:

答案 0 :(得分:2)

https://docs.djangoproject.com/en/dev/ref/generic-views/#django-views-generic-simple-redirect-to实际上可能更接近你正在寻找的东西。

from django.views.generic.simple import redirect_to

urlpatterns = patterns('',
    ('^foo/(?P<id>\d+)/$', redirect_to, {'url': '/bar/%(id)s/'}),
)

这样你就不需要把你的观点弄乱了。

答案 1 :(得分:1)

啊,弄清楚了。我在那里保留了旧的url模式并路由到bugs.views.bug_detail_redirect并定义了一个使用slug的方法并执行301:

from django.http import HttpResponse, HttpResponseRedirect, HttpResponsePermanentRedirect

def bug_detail_redirect(request,  slug):
    #bug = get_object_or_404(Bug,id=id)
     bug = get_object_or_404(Bug,slug=slug)
     return HttpResponsePermanentRedirect(bug.get_absolute_url())