首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Wagtail多站点设置中为每个站点拥有404

在Wagtail多站点设置中为每个站点拥有404
EN

Stack Overflow用户
提问于 2019-06-04 18:04:48
回答 1查看 1.9K关注 0票数 5

我试图让两个不同的Wagtail站点拥有自己的404页,但似乎没有一种方法可以指定在wagtail“设置”“=>”站点“部分”中的“站点”配置中将哪个页面作为404页使用,而且当我将它们放到所涉及的应用程序目录中时,我似乎无法获得正确的404:

代码语言:javascript
复制
codebase/
  ./__init__.py
  ./manage.py
  ./apps/
     ./settings.py
     ./urls.py
     ...
     ./django-app-1/
     ./django-app-2/
     ./templates/
        ./404.html
     ./mainsite/
        ./migrations/
        ./static/
        ./templates/
           ./mainsite/
           ./404.html (this 404 always gets used)
     ./spinoff/
        ./migrations/
        ./static/
        ./templates/
           ./spinoff/
           ./404.html (this file never gets used)

所以在INSTALLED_APPS中我们有:

代码语言:javascript
复制
INSTALLED_APPS = [
  ...django apps...
  ...wagtail apps...

  'apps.mainsite',
  'apps.spinoff',
]

在这种情况下,主站点拥有大量的页面类型,而运行在不同域上的派生站点通过从apps.mainsite导入这些页面类型来使用这些页面类型。

在Wagtail中,我们有两个作为root用户的页面:一个是Homepage,它是mainsite页面类型,另一个是spinof页面类型,它是从主机页面类型继承的spinof页面类型。

在站点设置中,我们有一个指向mainsite.com的站点条目,主Homepage设置为根,另一个站点条目指向spinoff.com,附带的主页设置为根。

对于这两个站点,一个不存在的url请求导致主站点的404.html被使用,所以问题是:我们如何使派生域上不存在的url解析到派生的404.html呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 12:21:43

因为Wagtail是构建在Django上的,所以可以使用自定义错误视图。Wagtail的core.view.serve调用core.models.page.route,如果找不到页面路由,则会引发Http404。因此,在urls.py中,您可以使用:

from yourapp.views import custom404_view

handler404 = 'yourapp.views.custom404_view'

views.py

代码语言:javascript
复制
from django.http import HttpResponseNotFound

def custom404_view(request, exception):       
    return HttpResponseNotFound('<h1>{}</h1>'.format(request.site))

我上面显示的返回Wagtail站点来说明站点在视图中是可用的,所以在您的示例中,只需根据站点有条件地返回HTML。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56449188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档