python - 如何使用 aiohttp 将 404 重定向到另一个模板?
问题描述
我想实现这个功能:如果路由表(404)中没有相关结果,则将其重定向以呈现定制的404模板。aiohttp有什么实现方式吗?谢谢
解决方案
这在中间件下的教程中有所介绍:http: //demos.aiohttp.org/en/latest/tutorial.html#middlewares
编辑:我的更改已合并,因此只需查看上面的链接以获取最新的最佳实践。
我刚刚对该代码提出了一些改进,所以这是我改进的方法:
import aiohttp_jinja2
from aiohttp import web
async def handle_404(request):
return aiohttp_jinja2.render_template('404.html', request, {})
async def handle_500(request):
return aiohttp_jinja2.render_template('500.html', request, {})
def create_error_middleware(overrides):
@web.middleware
async def error_middleware(request, handler):
try:
return await handler(request)
except web.HTTPException as ex:
override = overrides.get(ex.status)
if override:
resp = await override(request)
resp.set_status(ex.status)
return resp
raise
except:
resp = await overrides[500](request)
resp.set_status(500)
return resp
return error_middleware
def setup_middlewares(app):
error_middleware = create_error_middleware({
404: handle_404,
500: handle_500
})
app.middlewares.append(error_middleware)
推荐阅读
- google-bigquery - 合并相关事件以填补缺失数据
- menu - 如何在odoo中隐藏报告菜单?
- javascript - VueJs 使用 Axios 发布。错误变量未定义
- ns2 - 如何修复 NS2 中的此错误?
- php - 在 yii2 中使用 AjaxSubmitButton 显示预加载器并提交表单
- facebook - 无需权限即可在开发模式下运行 Facebook Messenger Bot APIv3.1
- javascript - 实现 css 日期选择器选项
- rxjs - 使用 RxJs 和 AngularFirestore 通过外键获取单个文档
- visual-studio-code - VS Code:片段选择转义“无字符”
- python-3.x - Python Pandas DataFrame从0重新索引某个数据