python - example - Minimice la salida HTML de la aplicación Flask con plantillas Jinja2
flask template (7)
Eche un vistazo aquí https://github.com/cobrateam/django-htmlmin#using-the-html_minify-function
Me doy cuenta de que se usa principalmente para django, pero el ejemplo muestra cómo usar este código de proyectos para hacer lo que quieras con una vista de frasco, creo.
¿Hay un indicador / extensión de configuración de Flask o Jinja2 para minimizar automáticamente la salida HTML después de representar la plantilla?
Encontré una mejor manera de hacer esto. Puedes minimizar todas tus páginas con este método:
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
He escrito una extensión de matraz para lograr ese propósito. Puede instalarlo usando pip install flask-htmlmin
y la fuente está disponible en https://github.com/hamidfzm/Flask-HTMLmin . Espero que sea de utilidad.
Modificación de la respuesta de @Bletch para la última versión de 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
El html minificado todavía tendrá algunos espacios entre las etiquetas. Si queremos eliminar eso, entonces remove_empty_space =True
atributo debe agregarse mientras se representa la plantilla.
return htmlmin.minify(rendered_html, remove_empty_space =True)
Para ampliar la utilidad de la respuesta de @olly_uk y el comentario de @Alexander, parece que la extensión django-htmlmin ahora está diseñada para ser utilizada con marcos diferentes a Django.
Desde los documentos https://github.com/cobrateam/django-htmlmin#using-the-html_minify-function , puede usar manualmente la función html_minify en las vistas de Flask, así:
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)
Usa el decorador.
from htmlmin.decorator import htmlmin
@htmlmin
def home():
...
O simplemente puedes usar:
re.sub(r''>/s+<'', ''><'', ''<tag> </tag>'') # results ''<tag></tag>''
Yo uso los siguientes decoradores
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
Y simplemente envolvió la función predeterminada de render_template como tal
if app.debug:
flask.render_template = prettify(flask.render_template)
else:
flask.render_template = uglify(flask.render_template)
Esto tiene la ventaja adicional de que se agrega automáticamente al caché, ya que no tocamos app.route