如何在不破坏 reverse() 的情况下支持旧的和新的 URI 版本?
例如,我有:
urlpatterns = patterns('',
url(r'^(old_part|new_part)/other/$', 'some_view'),
)
在这种情况下,/old_part/other/
和 /new_part/other/
指向相同的 View ,但 reverse() 方法失败,因为它不知道如何正确形成链接。
此外,如果我们有 url(r'^(old_part|new_part)/other/', include(sub_patterns))
如何处理呢?
你有什么想法吗?
感谢您的帮助。
最佳答案
我想你正在迁移。这意味着你不希望旧的 url 工作,你希望它重定向到新的 url。可能带有 301 HTTP 代码(永久重定向)。
相同内容有多个 URL 会使您的网站更难使用并损害您的 SEO。永久重定向将告诉 Google 和任何其他搜索引擎使用新地址重新索引页面。
你可以在 Django 中这样做:
from django.views.generic import RedirectView
urlpatterns = patterns('',
url(r'^new_part/other/$', 'some_view'),
url(r'^old_part/other/$',
RedirectView.as_view(url='new_part/other/', permanent=True)),
)
如果您需要捕获带有子路径的所有内容,您可以捕获 url 结尾并将其添加到重定向 url 中:
urlpatterns = patterns('',
url(r'^new_part/other/$', include(sub_patterns)),
url(r'^old_part/other/(?P<rest>.*)$',
RedirectView.as_view(url='new_part/other/%(rest)s', permanent=True)),
)
您可以在 Django 1.4 及更早版本中使用 redirect_to
通用 View 。
关于python - 支持旧的和新的 URI 版本都可以在不破坏 reverse() 的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20684309/