В python самый элегантный способ создания HTML-документов. В настоящее время я вручную добавляю все теги к гигантской строке и пишу это в файл. Есть ли более элегантный способ сделать это?
Создание HTML-документов в python
Ответ 1
Я считаю yattag самым элегантным способом сделать это.
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()
Он читается как html, с дополнительным преимуществом, что вам не нужно закрывать теги.
Ответ 2
Я бы предложил использовать один из многих языков шаблонов, доступных для python, например, встроенный в Django (вам не нужно использовать остальную часть Django, чтобы использовать его шаблонизатор) - запрос Google должен дать вам много других альтернатив. Реализация шаблонов.
Я считаю, что изучение библиотеки шаблонов помогает во многих отношениях - когда вам нужно сгенерировать электронную почту, HTML-страницу, текстовый файл или подобное, вы просто пишете шаблон, загружаете его в свою библиотеку шаблонов, а затем позволяете создавать код шаблона. готовый продукт.
Вот простой код для начала работы:
#!/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)
Еще проще, если у вас есть шаблоны на диске - посмотрите на функцию render_to_string для django 1.7, которая может загружать шаблоны с диска из предопределенного списка путей поиска, заполнять данными из диктофона и отображать в строку - все в одном вызове функции. (удалено из django 1.8, см. Engine.from_string для сопоставимых действий)
Ответ 3
Я бы порекомендовал использовать xml.dom для этого.
http://docs.python.org/library/xml.dom.html
Прочтите эту страницу руководства, у нее есть методы для создания XML (и, следовательно, XHTML). Это значительно упрощает все задачи XML, включая добавление дочерних узлов, типов документов, добавление атрибутов, создание текстовых узлов. Это должно помочь вам в подавляющем большинстве вещей, которые вы будете делать для создания HTML.
Это также очень полезно для анализа и обработки существующих XML-документов.
Надеюсь это поможет
PS
Вот учебник, который должен помочь вам с применением синтаксиса
Ответ 4
Если вы создаете документы HTML, я настоятельно рекомендую использовать систему шаблонов (например, jinja2), как предлагали другие. Если вам нужна генерация html-битов низкого уровня (возможно, в качестве входных данных для одного из ваших шаблонов), тогда пакет xml.etree является стандартным пакетом python и может хорошо соответствовать всем требованиям.
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"
if sys.version_info < (3, 0, 0):
# python 2
ET.ElementTree(html).write(sys.stdout, encoding='utf-8',
method='html')
else:
# python 3
ET.ElementTree(html).write(sys.stdout, encoding='unicode',
method='html')
Печатает следующее:
<html><body><div class="foo"><span class="bar">Hello World</span></div></body></html>
Ответ 5
Я использую фрагмент кода, известный как throw_out_your_templates
для некоторых моих собственных проектов:
https://github.com/tavisrudd/throw_out_your_templates
https://bitbucket.org/tavisrudd/throw-out-your-templates/src
К сожалению, для него нет пакета pypi, и он не является частью какого-либо дистрибутива, поскольку это означает только доказательство концепции. Я также не смог найти кого-нибудь, кто взял код и начал поддерживать его как настоящий проект. Тем не менее, я думаю, что стоит попробовать, даже если это означает, что вы должны отправить свою копию throw_out_your_templates.py
своим кодом.
Подобно предложению использовать yattag от John Smith Optional, этот модуль не требует изучения языка шаблонов, а также гарантирует, что вы никогда не забудете закрыть теги или указать специальные символы. Все остается написанным на Python. Вот пример того, как его использовать:
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>'),
]
]
Ответ 6
Да, вы ищете файл .writelines
Последовательность, как правило, представляет собой список или массив. Поэтому поместите все ваши строки в список или массив. И бросить их на функцию ниже.
Обязательно удалите все строки из строк, чтобы быть в безопасности
Документация на Python (поиск файлов .writelines)
file.writelines(последовательность) Напишите последовательность строк в файл. Последовательностью может быть любой итерируемый объект, производящий строки, обычно список строк. Возвратного значения нет. (Имя предназначено для соответствия readlines(); writelines() не добавляет разделителей строк.)