Есть ли флажок или расширение конфигурации Flask или Jinja2 для автоматического минимизации вывода HTML после визуализации шаблона?
Миниатюрный вывод HTML из приложения Flask с шаблонами Jinja2
Ответ 1
Посмотрите здесь https://github.com/cobrateam/django-htmlmin#using-the-html_minify-function
Я понимаю, что он используется в основном для django, но пример показывает, как использовать этот код проекта для того, чтобы делать то, что вы хотите, с флеш-представлением, я думаю.
Ответ 2
Найден лучший способ сделать это. Вы можете минимизировать все ваши страницы с помощью этого метода:
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
Ответ 3
Используйте декоратор.
from htmlmin.decorator import htmlmin
@htmlmin
def home():
...
Или вы можете просто использовать:
re.sub(r'>\s+<', '><', '<tag> </tag>') # results '<tag></tag>'
Ответ 4
Я написал расширение колбы для достижения этой цели. Вы можете установить его с помощью pip install flask-htmlmin
, и источник доступен в https://github.com/hamidfzm/Flask-HTMLmin. Надеюсь, это будет полезно.
Ответ 5
Я использую следующие декораторы
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
Ответ 6
Чтобы расширить полезность ответа от @olly_uk и комментария @Alexander, похоже, что расширение django-htmlmin теперь спроектировано для использования с каркасами, отличными от Django.
В документах здесь вы можете вручную использовать функцию html_minify в представлениях Flask, например:
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)
Ответ 7
Изменение ответа @Bletch для последней версии htmlmin.
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
атрибут remove_empty_space =True
во время визуализации шаблона.
return htmlmin.minify(rendered_html, remove_empty_space =True)