重定向到 DjangoCMS 中的自定义 404 html 页面

Posted

技术标签:

【中文标题】重定向到 DjangoCMS 中的自定义 404 html 页面【英文标题】:Redirect to custom 404 html page in DjangoCMS 【发布时间】:2015-10-10 17:46:21 【问题描述】:

如果用户输入错误的路径,我如何将用户重定向到我的自定义 404.html 页面?

views.py:

from django.shortcuts import render, render_to_response, redirect
from django.template import RequestContext

import threading

def url_redirect(request):
    return render_to_response('blog.html', RequestContext(request))

def post_redirect(request):
    return render_to_response('post.html', RequestContext(request))

def privacy_redirect(request):
    return render_to_response('privacy.html', RequestContext(request))

def terms_conditions_redirect(request):
    return render_to_response('terms.html', RequestContext(request))

def page_404(request):
    return render_to_response('404.html', RequestContext(request))

urls.py:

from __future__ import print_function
from cms.sitemaps import CMSSitemap
from django.conf.urls import *
from django.conf.urls.i18n import i18n_patterns
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin
from django.conf import settings
from django.conf.urls import patterns

admin.autodiscover()

urlpatterns = i18n_patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', 'sitemaps': 'cmspages': CMSSitemap),
    url(r'^select2/', include('django_select2.urls')),

    url(r'^blog', "website.views.url_redirect", name="url-redirect"),
    url(r'^post', "website.views.post_redirect", name="post-redirect"),
    url(r'^privacy', "website.views.privacy_redirect", name="privacy-redirect"),
    url(r'^terms', "website.views.terms_conditions_redirect", name="terms_conditions-redirect"),
    url(r'^404', "website.views.page_404", name="page_404"),
    url(r'^', include('cms.urls')),
)

# This is only needed when using runserver.
if settings.DEBUG:
    urlpatterns = patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
            'document_root': settings.MEDIA_ROOT, 'show_indexes': True),
        ) + staticfiles_urlpatterns() + urlpatterns

我的settings.py 文件中还有TEMPLATE_DEBUG = TrueDEBUG = False。请问有什么帮助吗?

另外,你们能告诉我views.py 的那些方法是否可以,或者是否可以用更好的方式重写?

谢谢

【问题讨论】:

【参考方案1】:

在 base.html(主文件夹模板)附近添加 404.html 当出现错误 404 时,Django 本身会获取您的 404 页面

在 settings.py 中

DEBUG = False

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = ['yourweb.com']

【讨论】:

谢谢。有效。但是 URL 没有更改为 mysite/en/404.html。相反,它只是在我的修改中附加路径。有什么想法吗? 404s 永远不应该重定向,而只是声明没有找到任何东西,就是这样......如果你重定向你会搞砸你的 SEO 工作......

以上是关于重定向到 DjangoCMS 中的自定义 404 html 页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的自定义404错误页面

如何使用基于 404 错误的 mod_rewrite 重定向到自定义错误页面

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

尝试将来电重定向到android中的自定义UI [关闭]

如何使用自定义 django 404 错误视图重定向?

将所有 DNS 请求重定向到 iOS 应用程序中的自定义解析器