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

时间:2019-06-04 18:04:48

标签: wagtail

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

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中,我们有:

INSTALLED_APPS = [
  ...django apps...
  ...wagtail apps...

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

在这种情况下,主站点拥有所有页面类型的绝大部分,而在不同域上运行的分支站点通过从{{1}导入它们来使用这些页面类型。 }。

在Wagtail中,我们有两个以root用户身份运行的页面:apps.mainsiteHomepage页面类型,而mainsiteSpinoff Homepage页面类型,它继承了从主站点的页面类型。

在网站设置中,我们有一个指向spinof的网站条目,其中主mainsite.com设置为Root,另一个有指向Homepage的网站条目,带有分拆主页设置为根。

对于这两个网站,不存在的url请求都会导致主站点的404.html被使用,因此问题是:我们如何使分拆域上不存在的url解析为分拆的404.html代替?

1 个答案:

答案 0 :(得分:3)

由于Wagtail是基于Django构建的,因此您可以customize the error view。 Wagtail的core.view.serve调用core.models.page.route,如果找不到页面路由,则会引发Http404。因此,您可以在urls.py中输入:

from yourapp.views import custom404_view

handler404 = 'yourapp.views.custom404_view'

views.py中:

from django.http import HttpResponseNotFound

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

上面显示的内容返回了Wagtail网站,以说明该网站在视图中可用,因此,根据您的情况,只需根据该网站有条件地返回HTML。