我正在尝试让两个不同的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.mainsite
是Homepage
页面类型,而mainsite
是Spinoff Homepage
页面类型,它继承了从主站点的页面类型。
在网站设置中,我们有一个指向spinof
的网站条目,其中主mainsite.com
设置为Root,另一个有指向Homepage
的网站条目,带有分拆主页设置为根。
对于这两个网站,不存在的url请求都会导致主站点的404.html被使用,因此问题是:我们如何使分拆域上不存在的url解析为分拆的404.html代替?
答案 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。