django 将“/”重定向到平面页面

Posted

技术标签:

【中文标题】django 将“/”重定向到平面页面【英文标题】:django redirecting '/' to a flat page 【发布时间】:2011-05-26 06:17:25 【问题描述】:

我正在尝试让'/' 重定向到'/first-page',其中'/first-page' 是一个带有slug 第一页的内置平面页面

我正在寻找类似的东西

(r'^/', 'redirect_to', 'url': '/flat-page'),

【问题讨论】:

Python + Django page redirect 的可能重复项 @jleedev:它是重复的,但从那时起,随着redirect_to 通用视图的引入,“最佳”答案发生了变化。 @Chris, redirect_to 在 Django 1.0 (docs.djangoproject.com/en/1.0/ref/generic-views/…) 中,在可能重复的最高投票答案之前存在。啧啧。让我们投票赞成那里的redirect_to 答案来解决这个讽刺***.com/questions/523356/python-django-page-redirect/… ;) @Day: 不再检查我的消息来源... sigh :-) 【参考方案1】:

使用 Django 的通用视图

urlpatterns = patterns('django.views.generic.simple',
    ('^$', 'redirect_to', 'url': '/first-page'),
)
urlpatterns += patterns('myProject.myApp',
    ...
)

urlpatterns = patterns('',
    ('^$', 'django.views.generic.simple.redirect_to', 'url': '/first-page'),
    ...
)

有关更多信息和示例,请参阅the docs。

也要注意你的 URL 匹配,你所拥有的将匹配以 / 开头的任何内容。与 example.com//anything 一样,请注意双斜杠。

【讨论】:

+1 表示django.views.generic.simple.redirect_to,+1 表示'^$' 而不是'^/',这将匹配所有内容,因此需要放在最后并且会打破 404。 谢谢@Chris,我说r'^/' 匹配example.com//anything 但不匹配example.com/anything 对吗?我没有测试过。 -- 更新:测试并正确。【参考方案2】:

使用HttpResponsePermanentRedirect:

from django.http import HttpResponsePermanentRedirect
# ...
(r'^$', 'redirect_to', lambda request: HttpResponsePermanentRedirect('/flat-page')),

【讨论】:

我认为这根本行不通。如果您坚持使用 lambda 函数,请执行以下操作:(r'^$', lambda request: HttpResponsePermanentRedirect('/flat-page')) 你是对的。我从问题中提取了代码,我认为这是正确的。【参考方案3】:

在 url 的视图中,您可以使用HttpResponseRedirect

from django.http import HttpResponseRedirect

def rootview(request):
    return HttpResponseRedirect('/flat-page')

【讨论】:

以上是关于django 将“/”重定向到平面页面的主要内容,如果未能解决你的问题,请参考以下文章

django:登录后重定向到引用页面[重复]

如果 url 模式不匹配,Django 如何重定向到 404 页面

如何将 is_staff 用户重定向到 Django 中的自定义模板?

从 django 管理操作中间页面重定向到更改表单页面

django 重定向

登录 Django 后重定向到 Next