如何在 Django 中重定向(包括 URL 更改)?

Posted

技术标签:

【中文标题】如何在 Django 中重定向(包括 URL 更改)?【英文标题】:How to redirect (including URL change) in Django? 【发布时间】:2016-04-15 19:59:42 【问题描述】:

我创建了一个index.html。我希望当有人访问http://www.mypage.com/http://www.mypage.com/index/ 时显示此页面(或view)。由于我是 Django 的新手,这可能是一个不好的方法: 在我的 URLS.PY:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',views.index),
    url(r'^index/$',views.index),...
    ...

这可以正常工作,但我很好奇,当有人转到 http://www.mypage.com/ 时,是否可以将 urlhttp://www.mypage.com/ 更改为 http://www.mypage.com/index/

我已经尝试过改变这个:

url(r'^$',views.index),

到这里:

url(r'^$','/index/'),

但它会引发错误:

Could not import '/index/'. The path must be fully qualified.

有人可以给我一个建议吗?

【问题讨论】:

【参考方案1】:

如果你想通过代码做到这一点:

from django.http import HttpResponseRedirect

def frontpage(request):
    ...
    return HttpResponseRedirect('/index/')

但是你也可以直接在urls规则里做:

from django.views.generic import RedirectView

urlpatterns = patterns('',
    (r'^$', RedirectView.as_view(url='/index/')),
)

供参考,请参阅此帖子:https://***.com/a/523366/5770129

【讨论】:

如果您使用的是 Django RedirectView.as_view(url='/index/', permanent=False),因为它默认为永久重定向,直到 Django 1.9。 最好使用pattern_name='index',而不是url='/index/',以避免对url进行硬编码。【参考方案2】:

您可以做的如下。把它放在你的 urls.py 中:

url(r'^$',views.redirect_index),

在你看来:

def redirect_index(request):
    return redirect('index')

【讨论】:

解决问题的正确方法是——你不希望有两个不同的 url 提供相同的内容(除非你不关心 SEO)。

以上是关于如何在 Django 中重定向(包括 URL 更改)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中重定向到不同的 URL?

如何在带有上下文的 Django 中重定向?

django 在 urls.py 中重定向

在codeigniter的htaccess中重定向url

如何确定 URL 是不是在 PHP 中重定向?

301 在 Django 中重定向 www 子域