Emacs Flask/Jinja2是否有在调试期间保存渲染模板的规定?
在调试过程中,通过浏览器中的“查看源代码”菜单项查看呈现的HTML和JS模板非常有用,但这样做会迫使用户使用浏览器的UI Jinja2(或Flask)是否提供了在服务器上保存最后n个渲染模板的功能?然后就可以使用自己喜欢的编辑器来查看渲染文件,同时使用自己熟悉的字体锁定和搜索功能Emacs Flask/Jinja2是否有在调试期间保存渲染模板的规定?,emacs,flask,jinja2,Emacs,Flask,Jinja2,在调试过程中,通过浏览器中的“查看源代码”菜单项查看呈现的HTML和JS模板非常有用,但这样做会迫使用户使用浏览器的UI Jinja2(或Flask)是否提供了在服务器上保存最后n个渲染模板的功能?然后就可以使用自己喜欢的编辑器来查看渲染文件,同时使用自己熟悉的字体锁定和搜索功能 当然,手工实现这样一个工具是可能的,但这样做太像在调试打印语句时对程序进行加料,这种方法无法扩展。我正在寻找一个更好的选择。我认为最简单的方法是在请求后使用钩子 from flask import g @main.ro
当然,手工实现这样一个工具是可能的,但这样做太像在调试打印语句时对程序进行加料,这种方法无法扩展。我正在寻找一个更好的选择。我认为最简单的方法是在请求后使用
钩子
from flask import g
@main.route('/')
def index():
models = Model.query.all()
g.template = 'index'
return render_template('index.html', models=models)
@main.after_request
def store_template(response):
if hasattr(g, 'template'):
with open('debug/{0}-{1}'.format(datetime.now(), g.template), 'w') as f:
f.write(response.data)
return response
这是文件。
至于只收集最后的n
模板,我可能会设置一个cron作业来完成。这里有一个例子
import os
from datetime import datetime
def make_files(n):
text = '''
<html>
</html>
'''
for a in range(n):
with open('debug/index-{0}.html'.format(datetime.now()), 'w') as f:
f.write(text)
def get_files(dir):
return [file for file in os.listdir(dir) if file.endswith('.html')]
def delete_files(dir, files, amount_kept):
rev = files[::-1]
for file in rev[amount_kept:]:
loc = dir + '/' + file
os.remove(loc)
if __name__ == '__main__':
make_files(7)
files = get_files('debug')
print files
delete_files('debug', files, 5)
files = get_files('debug')
print files
导入操作系统
从日期时间导入日期时间
def生成文件(n):
文本='''
'''
对于范围(n)内的a:
将open('debug/index-{0}.html'.format(datetime.now()),'w')作为f:
f、 书写(文本)
def get_文件(目录):
返回[如果file.endswith('.html'),则返回os.listdir(dir)中文件的文件]
def delete_文件(目录、文件、保留金额):
rev=文件[:-1]
对于版本为[保留金额:]的文件:
loc=dir+'/'+文件
os.移除(loc)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
制作文件(7)
files=get_文件('debug')
打印文件
删除_文件(“调试”,文件,5)
files=get_文件('debug')
打印文件
编辑
删除函数中文件的顺序相反,因此它将保留最新的文件。也无法找到访问原始模板名称的方法以避免硬编码
编辑2
好的,因此更新了它,以显示如何使用flask.g
在请求后将模板名称传递给
函数
文档好问题,好答案。我建议的一个变化是使用Python日志;然后,您可以对日志记录量进行配置控制,并且可以使用RotatingFileHandler。唯一的问题是区分不同的模板。我会想办法的。当你创建记录器时,你可以给他们起名字,这样会有帮助。最后使用了flask.g
,因为它只存在于一个请求周期的范围内,所以在整个生命周期中传递模板的名称是非常完美的。这是一个非常好的答案,我希望我没有询问清除最后n个文件的问题。这是一个正交问题,可以通过命令行在@main.after_request def store_模板(响应)
内完成,甚至可以手动完成。在第一部分中,在每个视图函数中设置g.template
是不吸引人的,因此当我将调试重点放在一个或几个视图函数上时,我冒昧地修改了第一部分。