En python, ¿cuál es la forma más elegante de generar documentos HTML? Actualmente agregué manualmente todas las etiquetas a una cadena gigante y escribí eso en un archivo. ¿Hay una manera más elegante de hacer esto?Generación de documentos HTML en python
Respuesta
Recomendaría usar xml.dom para hacer esto.
http://docs.python.org/library/xml.dom.html
Leer esta página de manual, que tiene métodos para la construcción de XML (y por lo tanto XHTML). Hace que todas las tareas XML sean mucho más sencillas, como agregar nodos secundarios, tipos de documentos, agregar atributos y crear nodos de texto. Esto debería poder asistirlo en la gran mayoría de las cosas que hará para crear HTML.
También es muy útil para analizar y procesar documentos xml existentes.
Esperanza esto ayuda
PS
Aquí hay un tutorial que debe ayudar con la aplicación de la sintaxis
HTML no es un subconjunto de XML. Si está utilizando una herramienta XML, generará XHTML, no HTML. – You
@You Este es un punto justo voy a editar mi respuesta –
Es una falta grave que Python no tiene un no-XML, HTML-específica (por ejemplo, tiene métodos como div (id = 'myid', otherattr =' .. . '), ul() etc) versión de esto como estándar (hay terceros). Perl y Ruby lo hacen. – JDonner
Sí, se están buscando .writelines archivos
Una secuencia generalmente es una lista o matriz. Así que ponga todas sus líneas en una lista o matriz. Y agréguelos a la función a continuación.
Asegúrese de quitar cualquier nuevas constantes de la línea de las cuerdas sólo para estar seguro
Python Documentation (search for file.writelines)
file.writelines (secuencia) Escribir una secuencia de cadenas en el archivo. La secuencia puede ser cualquier objeto iterable que produzca cadenas, generalmente una lista de cadenas. No hay valor de retorno (El nombre se pretende igualar readlines();. Writelines() no añade separadores de línea)
se recomienda usar uno de los muchos lenguajes de plantillas disponibles para Python, por ejemplo el built into Django (usted no tiene utilizar el resto de Django para usar su motor de plantillas): una consulta de Google debería proporcionarle muchas otras implementaciones de plantillas alternativas.
Me parece que aprender una biblioteca de plantillas ayuda de muchas maneras: cada vez que necesite generar un correo electrónico, página HTML, archivo de texto o similar, solo escriba una plantilla, cárguela con su biblioteca de plantillas, luego deje el código de plantilla crea el producto terminado.
Aquí hay algo de código simple para empezar:
#!/usr/bin/env python
from django.template import Template, Context
from django.conf import settings
settings.configure() # We have to do this to use django templates standalone - see
# http://stackoverflow.com/questions/98135/how-do-i-use-django-templates-without-the-rest-of-django
# Our template. Could just as easily be stored in a separate file
template = """
<html>
<head>
<title>Template {{ title }}</title>
</head>
<body>
Body with {{ mystring }}.
</body>
</html>
"""
t = Template(template)
c = Context({"title": "title from code",
"mystring":"string from code"})
print t.render(c)
Es aún más sencillo si tiene plantillas en el disco - echa un vistazo a la función render_to_string que se pueden cargar plantillas de disco desde una lista predefinida de rutas de búsqueda, llenar con datos de un dictador y renderizado a una cadena - llamada de función todo en uno.
Pensé en esto, pero no creo que sea exactamente lo que el OP está pidiendo. Parece que quieren construir el HTML en sí mediante programación, mientras que una plantilla supone que ya tienes el HTML, pero solo necesita completar algunas variables. –
Suena más como si tuvieran el contenido listo, y luego necesitan pegar html alrededor del contenido. Esto es exactamente para lo que es un motor de plantillas. – Wilduck
Además, si quiere un motor de plantillas como el de Django, use Jinja2. Es más rápido, más potente y es un proyecto independiente. http://jinja.pocoo.org/docs/ – Wilduck
Encuentro que yattag es la forma más elegante de hacerlo.
from yattag import Doc
doc, tag, text = Doc().tagtext()
with tag('html'):
with tag('body'):
with tag('p', id = 'main'):
text('some text')
with tag('a', href='/my-url'):
text('some link')
result = doc.getvalue()
Se lee como html, con el beneficio adicional de que no tiene que cerrar las etiquetas.
estoy usando el fragmento de código conocido como throw_out_your_templates
para algunos de mis propios proyectos:
https://github.com/tavisrudd/throw_out_your_templates
https://bitbucket.org/tavisrudd/throw-out-your-templates/src
Por desgracia, no hay ningún paquete PyPI para ello y que no es parte de cualquier distribución ya que esto solo se entiende como una prueba de concepto. Tampoco pude encontrar a alguien que tomara el código y comencé a mantenerlo como un proyecto real. Sin embargo, creo que vale la pena intentarlo aunque signifique que debe enviar su propia copia de throw_out_your_templates.py
con su código.
Similar a la sugerencia de usar yattag por John Smith Opcional, este módulo no requiere que aprenda ningún lenguaje de plantillas y también se asegura de que nunca olvide cerrar etiquetas o citar caracteres especiales. Todo queda escrito en Python. Aquí está un ejemplo de cómo se usa:
html(lang='en')[
head[title['An example'], meta(charset='UTF-8')],
body(onload='func_with_esc_args(1, "bar")')[
div['Escaped chars: ', '< ', u'>', '&'],
script(type='text/javascript')[
'var lt_not_escaped = (1 < 2);',
'\nvar escaped_cdata_close = "]]>";',
'\nvar unescaped_ampersand = "&";'
],
Comment('''
not escaped "< & >"
escaped: "-->"
'''),
div['some encoded bytes and the equivalent unicode:',
'你好', unicode('你好', 'utf-8')],
safe_unicode('<b>My surrounding b tags are not escaped</b>'),
]
]
Si usted está construyendo documentos HTML de lo que sugeriría el uso de un sistema de plantillas (como jinja2) como han sugerido otros. Si usted está en necesidad de alguna generación de bajo nivel de bits html (tal vez como una entrada a una de sus plantillas), entonces el paquete es un paquete xml.etree pitón estándar y podría encajar muy bien el proyecto de ley.
import sys
from xml.etree import ElementTree as ET
html = ET.Element('html')
body = ET.Element('body')
html.append(body)
div = ET.Element('div', attrib={'class': 'foo'})
body.append(div)
span = ET.Element('span', attrib={'class': 'bar'})
div.append(span)
span.text = "Hello World"
ET.ElementTree(html).write(sys.stdout, encoding='utf8',
method='html')
imprime el siguiente:
<html><body><div class="foo"><span class="bar">Hello World</span></div></body></html>
- 1. Generación de documentos PDF en ASP.NET
- 2. nosetests --cover-html no genera documentos html
- 3. ¿Cómo usar CDATA en documentos html?
- 4. Generación de rangos de color en Python
- 5. Extracción de múltiples documentos MongoDB en Python
- 6. python: generación de particiones enteras
- 7. Generación de salida HTML del criterio
- 8. generación de HTML lenta con Vaadin
- 9. ¿Múltiples nodos de texto en ElementTree de Python? Generación de HTML
- 10. Scripts a documentos (funcionalidad de publicación de Matlab en python)
- 11. Python itertools.product reordenar la generación
- 12. Generación PDF desde HTML (componente para .NET)
- 13. Cómo automatizar la generación de salida HTML en Enterprise Architect
- 14. Frecuencia de recuento de palabras en documentos usando python regex
- 15. Generación de código C++ con Python
- 16. Generación de código Python con pyside-uic
- 17. Generación/síntesis de sonido con python?
- 18. Limpiar HTML en Python
- 19. Analizando HTML en Python
- 20. Descargar html en python?
- 21. ¿Cómo dividir documentos HTML en páginas para libros electrónicos?
- 22. ¿Es el carácter "&" solo ilegal en HTML 4.01 Documentos estrictos?
- 23. Generación de documentos XML a partir de esquemas XML en C++
- 24. Truncamiento de HTML en Python
- 25. URL semántica de "identificador de fragmento" para documentos HTML
- 26. Generación de documentación HTML a partir de WSDL
- 27. Generación dinámica de formularios HTML a través de GUI
- 28. Generación de una lista de funciones en Python
- 29. Bibliotecas de generación/validación de formas en Python
- 30. Generación de sonido de onda sinusoidal en Python
posible duplicado de [generador html pitón] (http://stackoverflow.com/questions/1548474/python-html-generator). Si está generando XHTML, también considere usar una herramienta XML. – You
Existen [varios sistemas de plantillas] (http://wiki.python.org/moin/Templating) disponibles para Python. ¿Es esto lo que estás buscando? –