gpt4 book ai didi

python - 使用 mako 模板处理 404 错误

转载 作者:行者123 更新时间:2023-11-28 16:51:01 25 4
gpt4 key购买 nike

尝试在出现 404 错误时显示由 mako 渲染的模板,但它仍然显示带有 cherrypy 页脚和附加消息的标准错误页面:|此外,自定义错误页面失败:TypeError: render_body() takes exactly 1 argument (3 given )"代码:

def error_page_404(status, message, traceback, version):
tmpl = tpl.get_template("404.mako")
return tmpl.render(status, message)
cherrypy.config.update({'error_page.404': error_page_404})

需要帮助!如何使用我的布局(mako 模板)显示完全自定义的错误页面?

完整代码:

import sys
sys.stdout = sys.stderr
import os, atexit
import threading
import cherrypy
from mako.template import Template
from mako.lookup import TemplateLookup

cherrypy.config.update({'environment': 'embedded'})
if cherrypy.engine.state == 0:
cherrypy.engine.start(blocking=False)
atexit.register(cherrypy.engine.stop)

localDir = os.path.dirname(__file__)
absDir = os.path.join(os.getcwd(), localDir)
path = os.path.join(absDir,'files')
templ_path = os.path.join(absDir,'html')

tpl = TemplateLookup(directories=[templ_path], input_encoding='utf-8', output_encoding='utf-8',encoding_errors='replace')

def error_page_404(status, message, traceback, version):
tmpl = tpl.get_template("404.mako")
return tmpl.render(status, message)
cherrypy.config.update({'error_page.404': error_page_404})

class Root:
def index(self):
tmpl = tpl.get_template("index.mako")
return tmpl.render(text = 'Some text',url = cherrypy.url())
index.exposed = True

_application = cherrypy.Application(Root(), None)

import posixpath

def application(environ, start_response):
environ['SCRIPT_NAME'] = posixpath.dirname(environ['SCRIPT_NAME'])
if environ['SCRIPT_NAME'] == '/':
environ['SCRIPT_NAME'] = ''
return _application(environ, start_response)

最佳答案

您很可能在 404 处理程序中引发错误,我猜您没有像 this 这样设置 cherrypy 配置的 request.error_response ,关于response_body的错误检查this , 你可能用错了 body的模板。

根据评论编辑:

def error_page_404(status, message, traceback, version):
tmpl = tpl.get_template("404.mako")
return tmpl.render(stat=status, msg=message)

cherrypy.config.update({'error_page.404': error_page_404})

render 方法,只用关键字参数指定函数行为,你也可以更灵活一点,像这样指定相同的函数:

def error_page_404(status, message, traceback, version):
tmpl = tpl.get_template("404.mako")
args = {'stat': status,
'msg': message}
return tmpl.render(**args)

这样可以更容易地扩展模板的参数,我通常使用 **args对于我的 render 调用。

但基本上问题是(正如您所指出的),您在调用 render 时使用了非关键字参数,而预期的输入只是模板的关键字参数。

关于python - 使用 mako 模板处理 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7632183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com