我试图让两个不同的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',
]在这种情况下,主站点拥有大量的页面类型,而运行在不同域上的派生站点通过从apps.mainsite导入这些页面类型来使用这些页面类型。
在Wagtail中,我们有两个作为root用户的页面:一个是Homepage,它是mainsite页面类型,另一个是spinof页面类型,它是从主机页面类型继承的spinof页面类型。
在站点设置中,我们有一个指向mainsite.com的站点条目,主Homepage设置为根,另一个站点条目指向spinoff.com,附带的主页设置为根。
对于这两个站点,一个不存在的url请求导致主站点的404.html被使用,所以问题是:我们如何使派生域上不存在的url解析到派生的404.html呢?
发布于 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中
from django.http import HttpResponseNotFound
def custom404_view(request, exception):
return HttpResponseNotFound('<h1>{}</h1>'.format(request.site))我上面显示的返回Wagtail站点来说明站点在视图中是可用的,所以在您的示例中,只需根据站点有条件地返回HTML。
https://stackoverflow.com/questions/56449188
复制相似问题