template example python web-applications flask wsgi jinja2

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)

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


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