Flask/Jinja2 是否有在调试期间保存渲染模板的规定?
Do Flask/Jinja2 have a provision to save rendered templates during debugging?
调试时,通过浏览器中的 "view source" 菜单项查看呈现的 HTML 和 JS 模板很有用,但这样做会强制使用浏览器的 UI .
Jinja2(或 Flask)是否提供在服务器上保存最后 n 个渲染模板的工具?然后就可以使用自己喜欢的编辑器来查看呈现的文件,以及使用自己熟悉的字体锁定和搜索工具。
当然可以手动实现这样的功能,但是这样做太像在使用 print 语句进行调试时对程序进行调试,这是一种无法扩展的方法。我正在寻找更好的选择。
我认为最简单的方法是使用 after_request
挂钩。
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
这是文档。
http://flask.pocoo.org/snippets/53/
至于只收集最后的 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
编辑
删除函数中的文件顺序颠倒,因此它将保留最新的文件。也无法找到访问原始模板名称以避免硬编码的方法。
编辑 2
好的,更新它以展示如何使用 flask.g
将模板名称传递给 after_request
函数
文档http://flask.pocoo.org/docs/0.11/testing/#faking-resources
调试时,通过浏览器中的 "view source" 菜单项查看呈现的 HTML 和 JS 模板很有用,但这样做会强制使用浏览器的 UI .
Jinja2(或 Flask)是否提供在服务器上保存最后 n 个渲染模板的工具?然后就可以使用自己喜欢的编辑器来查看呈现的文件,以及使用自己熟悉的字体锁定和搜索工具。
当然可以手动实现这样的功能,但是这样做太像在使用 print 语句进行调试时对程序进行调试,这是一种无法扩展的方法。我正在寻找更好的选择。
我认为最简单的方法是使用 after_request
挂钩。
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
这是文档。 http://flask.pocoo.org/snippets/53/
至于只收集最后的 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
编辑
删除函数中的文件顺序颠倒,因此它将保留最新的文件。也无法找到访问原始模板名称以避免硬编码的方法。
编辑 2
好的,更新它以展示如何使用 flask.g
将模板名称传递给 after_request
函数
文档http://flask.pocoo.org/docs/0.11/testing/#faking-resources