如何在Wagtail中预览自定义500错误页面?
我已经在Wagtail项目中创建了自定义的500和404错误页面,目前可以通过输入不存在的URL来正常预览404页面,但不知道该怎么触发500错误来预览自定义的500页面,主要是要检查页面里的静态图片链接是否正常工作。
我的urls.py代码如下:
from django.conf import settings from django.conf.urls import include, url from django.conf.urls.static import static from django.contrib import admin from wagtail.contrib.sitemaps.views import sitemap from wagtail.admin import urls as wagtailadmin_urls from wagtail.core import urls as wagtail_urls from wagtail.documents import urls as wagtaildocs_urls admin.autodiscover() urlpatterns = [ url(r'django-admin/', admin.site.urls), url(r'^admin/', include(wagtailadmin_urls)), url(r'^documents/', include(wagtaildocs_urls)), url(r'^sitemap\.xml$', sitemap), url(r'', include('puput.urls')), url(r'', include(wagtail_urls)), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) if 'debug_toolbar' in settings.INSTALLED_APPS: import debug_toolbar urlpatterns += [ url(r'^__debug__/', include(debug_toolbar.urls)), ]
几种快速预览自定义500错误页面的方法
因为500是服务器内部错误,没法像404那样靠访问不存在的URL触发,给你分享几个实用的测试方法:
1. 临时加个测试视图主动触发500
这是最直接的方式,你可以临时写个简单视图故意抛出异常,访问对应URL就能看到自定义500页面:
首先,在任意一个app的views.py里添加这个视图:
def trigger_500(request): # 手动抛出异常触发500错误 raise Exception("测试500错误触发")
然后在你的urls.py里添加路由(记得放在wagtail_urls前面,避免被Wagtail路由拦截):
# 先导入刚才的视图,假设在myapp.views下 from myapp.views import trigger_500 urlpatterns = [ # 保留你原有的所有路由 url(r'^trigger-500/$', trigger_500), # 新增这一行 url(r'', include('puput.urls')), url(r'', include(wagtail_urls)), ]
现在访问http://localhost:8000/trigger-500/就能触发500错误,看到你的自定义页面了。测试完记得把这个视图和路由删掉就行,避免上线后留隐患。
2. 临时调整Django的DEBUG设置(仅开发环境用)
默认情况下,当DEBUG = True时,Django会显示自带的调试页面,不会加载你的自定义500页面。你可以临时修改settings.py:
- 把
DEBUG改成False - 设置
ALLOWED_HOSTS = ['localhost', '127.0.0.1'](必填,否则Django会报错)
重启服务器后,再用上面的测试视图触发500,或者找个会引发服务器错误的操作(比如故意写错数据库查询语句),就能看到你的自定义500页面了。测试完记得改回DEBUG = True,方便日常开发调试。
3. 单独验证静态图片链接的小技巧
如果只是想确认500页面里的图片路径是否正确,其实不用真触发500错误:
- 直接打开
templates/500.html模板文件,检查图片的引用路径是否符合Django/Wagtail的静态文件规范(比如用{% static %}标签引用) - 或者在本地手动渲染模板,直接访问图片的静态资源URL,确认资源能正常加载
需要注意:当DEBUG = False时,Django不会自动提供静态文件服务,所以你得确保已经运行过python manage.py collectstatic,把静态文件收集到STATIC_ROOT目录下,否则即使路径正确,图片也可能加载失败——这也是预览500页面时要重点检查的点。
内容的提问来源于stack exchange,提问作者Toms Code

