Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs Flask/Jinja2是否有在调试期间保存渲染模板的规定?_Emacs_Flask_Jinja2 - Fatal编程技术网

Emacs Flask/Jinja2是否有在调试期间保存渲染模板的规定?

Emacs Flask/Jinja2是否有在调试期间保存渲染模板的规定?,emacs,flask,jinja2,Emacs,Flask,Jinja2,在调试过程中,通过浏览器中的“查看源代码”菜单项查看呈现的HTML和JS模板非常有用,但这样做会迫使用户使用浏览器的UI Jinja2(或Flask)是否提供了在服务器上保存最后n个渲染模板的功能?然后就可以使用自己喜欢的编辑器来查看渲染文件,同时使用自己熟悉的字体锁定和搜索功能 当然,手工实现这样一个工具是可能的,但这样做太像在调试打印语句时对程序进行加料,这种方法无法扩展。我正在寻找一个更好的选择。我认为最简单的方法是在请求后使用钩子 from flask import g @main.ro

在调试过程中,通过浏览器中的“查看源代码”菜单项查看呈现的HTML和JS模板非常有用,但这样做会迫使用户使用浏览器的UI

Jinja2(或Flask)是否提供了在服务器上保存最后n个渲染模板的功能?然后就可以使用自己喜欢的编辑器来查看渲染文件,同时使用自己熟悉的字体锁定和搜索功能


当然,手工实现这样一个工具是可能的,但这样做太像在调试打印语句时对程序进行加料,这种方法无法扩展。我正在寻找一个更好的选择。

我认为最简单的方法是在请求后使用
钩子

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
是不吸引人的,因此当我将调试重点放在一个或几个视图函数上时,我冒昧地修改了第一部分。