24

渲染模板后是否有 Flask 或 Jinja2 配置标志/扩展来自动缩小 HTML 输出?

4

7 回答 7

29

找到了一个更好的方法来做到这一点。您可以使用以下方法缩小所有页面:

from flask import Flask
from htmlmin.main import minify

app = Flask(__name__)


@app.after_request
def response_minify(response):
    """
    minify html response to decrease site traffic
    """
    if response.content_type == u'text/html; charset=utf-8':
        response.set_data(
            minify(response.get_data(as_text=True))
        )

        return response
    return response
于 2014-10-01T10:53:07.293 回答
10

看看这里https://github.com/cobrateam/django-htmlmin#using-the-html_minify-function

我意识到它主要用于 django,但我认为该示例显示了如何使用此项目代码通过烧瓶视图执行您想要的操作。

于 2012-11-27T15:57:39.077 回答
7

我使用以下装饰器

import bs4
import functools
import htmlmin


def prettify(route_function):
    @functools.wraps(route_function)
    def wrapped(*args, **kwargs):
        yielded_html = route_function(*args, **kwargs)
        soup = bs4.BeautifulSoup(yielded_html, 'html.parser')
        return soup.prettify()

    return wrapped

def uglify(route_function):
    @functools.wraps(route_function)
    def wrapped(*args, **kwargs):
        yielded_html = route_function(*args, **kwargs)
        minified_html = htmlmin.minify(yielded_html)
        return minified_html

    return wrapped

并且像这样简单地包装了默认的 render_template 函数

if app.debug:
    flask.render_template = prettify(flask.render_template)
else:
    flask.render_template = uglify(flask.render_template)

这具有自动添加到缓存的额外好处,因为我们实际上并没有触及 app.route

于 2016-08-23T04:07:16.730 回答
6

我写了一个烧瓶扩展来实现这个目的。您可以使用它来安装它pip install flask-htmlmin,源代码可在https://github.com/hamidfzm/Flask-HTMLmin获得。希望它会有用。

于 2015-02-14T20:11:39.077 回答
5

使用装饰器。

from htmlmin.decorator import htmlmin

@htmlmin
def home():
...

或者你可以只使用:

re.sub(r'>\s+<', '><', '<tag>   </tag>') # results '<tag></tag>'
于 2014-10-22T15:33:57.743 回答
3

为了扩展来自@olly_uk 的答案和@Alexander 的评论的有用性,似乎django-htmlmin扩展现在被设计为与 Django 以外的框架一起使用。

此处的文档中,您可以在 Flask 视图中手动使用 html_minify 函数,如下所示:

from flask import Flask
from htmlmin.minify import html_minify

app = Flask(__name__)

@app.route('/')
def home():
    rendered_html = render_template('home.html')
    return html_minify(rendered_html)
于 2014-05-26T12:20:15.307 回答
1

为最新版本的 htmlmin 修改 @Bletch 答案。

from flask import Flask
import htmlmin

app = Flask(__name__)

@app.route('/')
def home():
    rendered_html = render_template('home.html')
    return htmlmin.minify(rendered_html)

https://htmlmin.readthedocs.io/en/latest/quickstart.html

缩小的 html 在标签之间仍然会有一些空格。如果我们想删除它,则remove_empty_space =True需要在渲染模板时添加属性。

return htmlmin.minify(rendered_html, remove_empty_space =True)

https://htmlmin.readthedocs.io/en/latest/reference.html

于 2019-01-21T14:35:19.800 回答