【发布时间】:2013-08-30 10:54:52
【问题描述】:
我希望将旧 URL 列表重定向到 Django/Heroku 应用程序中的新 URL 列表。
由于我使用的是 Heroku,我不能只使用 .htaccess 文件。
我看到 rails 有 rack-rewrite,但我还没有看到 Django 类似的东西。
【问题讨论】:
我希望将旧 URL 列表重定向到 Django/Heroku 应用程序中的新 URL 列表。
由于我使用的是 Heroku,我不能只使用 .htaccess 文件。
我看到 rails 有 rack-rewrite,但我还没有看到 Django 类似的东西。
【问题讨论】:
Django 有重定向应用程序,它允许在数据库中存储重定向列表: https://docs.djangoproject.com/en/dev/ref/contrib/redirects/
这里还有一个通用的 RedirectView:
https://docs.djangoproject.com/en/1.3/ref/class-based-views/#redirectview
而最底层是HttpResponseRedirect:
https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpResponseRedirect
【讨论】:
文档中的 301 重定向示例:
urlpatterns = patterns('django.views.generic.simple',
('^foo/(?P<id>\d+)/$', 'redirect_to', {'url': '/bar/%(id)s/'}),
)
【讨论】:
虽然在接受的答案中提到的redirects app 是一个非常好的解决方案,但它还涉及每个 404 错误的数据库调用。我想避免这种情况,所以最终只是在 URL conf 中手动实现。
"""redirects.py that gets included by urls.py"""
from django.urls import path, reverse_lazy
from django.views.generic.base import RedirectView
def redirect_view(slug):
"""
Helper view function specifically for the redirects below since they take
a kwarg slug as an argument.
"""
return RedirectView.as_view(
url=reverse_lazy('app_name:pattern_name', kwargs={'slug': slug}),
permanent=True)
urlpatterns = [
path('example-redirect/', redirect_view('new-url')),
]
【讨论】: