Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python生成HTML文档_Python_Html - Fatal编程技术网

用python生成HTML文档

用python生成HTML文档,python,html,Python,Html,在python中,生成HTML文档最优雅的方式是什么。我目前手动将所有标记附加到一个巨大的字符串中,并将其写入一个文件。有没有更优雅的方法可以做到这一点?我建议使用xml.dom来实现这一点 阅读本手册页面,它提供了构建XML(以及XHTML)的方法。它使所有XML任务变得更加简单,包括添加子节点、文档类型、添加属性、创建文本节点。这应该能够帮助您完成创建HTML的绝大多数工作 它对于分析和处理现有的xml文档也非常有用 希望这有帮助 附言 下面是一个教程,可以帮助您应用语法 是的,您正在查找

在python中,生成HTML文档最优雅的方式是什么。我目前手动将所有标记附加到一个巨大的字符串中,并将其写入一个文件。有没有更优雅的方法可以做到这一点?

我建议使用xml.dom来实现这一点

阅读本手册页面,它提供了构建XML(以及XHTML)的方法。它使所有XML任务变得更加简单,包括添加子节点、文档类型、添加属性、创建文本节点。这应该能够帮助您完成创建HTML的绝大多数工作

它对于分析和处理现有的xml文档也非常有用

希望这有帮助

附言

下面是一个教程,可以帮助您应用语法


是的,您正在查找file.writelines

序列通常是一个列表或数组。因此,将所有行放入列表或数组中。 然后将它们扔到下面的函数中

为了安全起见,请确保从字符串中删除任何新行常量

file.writelines(序列)
将字符串序列写入文件。序列可以是任何生成字符串的iterable对象,通常是字符串列表。没有返回值。(该名称旨在匹配readlines();writelines()不添加行分隔符。)

我建议使用python可用的多种模板语言之一,例如(您不必使用Django的其余部分来使用其模板引擎)-谷歌查询应该为您提供大量其他替代模板实现

我发现学习模板库在很多方面都很有帮助——每当你需要生成电子邮件、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)
#/usr/bin/env python
从django.template导入模板,上下文
从django.conf导入设置
settings.configure()#我们必须这样做才能单独使用django模板-请参阅
# http://stackoverflow.com/questions/98135/how-do-i-use-django-templates-without-the-rest-of-django
#我们的模板。可以很容易地存储在单独的文件中
模板=“”“
模板{{title}
具有{mystring}的主体。
"""
t=模板(模板)
c=上下文({“标题”:“来自代码的标题”,
“mystring”:“代码中的字符串”})
打印t.render(c)
如果磁盘上有模板,则更简单—请查看django 1.7的函数,该函数可以从预定义的搜索路径列表中从磁盘加载模板,填充口述中的数据,并呈现为字符串—所有这些都包含在一个函数调用中。(从上的django 1.8中删除,请参阅以获得类似的操作)

您可以使用优雅的方式完成此操作。仅供参考,我是图书馆的作者

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,还有一个额外的好处,那就是你不必关闭标记。

我正在为我自己的一些项目使用名为“扔掉你的模板”的代码片段:

不幸的是,它没有pypi包,也不是任何发行版的一部分,因为这只是一个概念证明。我也没能找到一个把代码作为实际项目进行维护的人。尽管如此,我认为这是值得一试的,即使这意味着你必须将自己的
副本与你的代码一起发送出去

与John Smith建议使用yattag(可选)类似,本模块不要求您学习任何模板语言,并确保您永远不会忘记关闭标记或引用特殊字符。一切都是用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>'),
      ]
  ]
html(lang='en')[
标题[title['An example',meta(charset='UTF-8')],
正文(带参数(1,“bar”)的onload='func')[
div[“转义字符:'、'<'、u'>'、'&'],
脚本(type='text/javascript')[
'var lt_not_escape=(1<2);',
“\nvar转义\u cdata\u close=“]]>”;”,
“\nvar unescaped_-ampersand=“&””
],
注释(“”)
未转义“<&>”
转义:“-->”
'''),
div['一些编码字节和等效的unicode:',
'你好', unicode('你好', 'utf-8’)],
safe_unicode(“我周围的b标记未转义”),
]
]

如果您正在构建HTML文档,我强烈建议您使用其他人建议的模板系统(如)。如果您需要一些低级别的html位生成(可能作为模板的输入),那么这个包就是一个标准的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')
导入系统 从xml.etree导入ElementTree作为ET html=ET.Element('html') body=ET.Element(‘body’) html.append(正文) div=ET.Element('div',attrib={'class':'foo'}) body.append(div) span=ET.Element('span',attrib={'class':'bar'}) div.append(span) span.text=“你好,世界” 如果系统版本信息<(3,0,0): #python 2 编写(sys.stdout,encoding='utf-8', 方法(html) 其他: #python 3 编写(sys.stdout,encoding='unicode', 方法(html)
打印以下内容:

<html><body><div class="foo"><span class="bar">Hello World</span></div></body></html>
你好,世界

还有一个不错的现代选择:
airium

从airium导入airium
a=Airium()
a(“”)
使用a.html(lang=“pl”):
用a.head()表示:
a、 meta(charset=“utf-8”)
a、 标题(\u t=“Airium示例”)
使用a.body():
使用a.h3(id=“id23409231”,klass='main_header'):
a(“你好,世界。”)
html=str(a)#转换为字符串提取值
打印(html)
打印这样的字符串:


艾瑞姆示例
你好,世界。
airium
的最大优点是它还有一个反向转换器,可以用html字符串构建python代码。如果你
from Tag import Tag


with Tag('html') as html:
    with Tag('body'):
        with Tag('div'):
            with Tag('span', attrib={'id': 'foo'}) as span:
                span.text = 'Hello, world!'
            with Tag('span', attrib={'id': 'bar'}) as span:
                span.text = 'This was an example!'

html.write('test_html.html')

<html><body><div><span id="foo">Hello, world!</span><span id="bar">This was an example!</span></div></body></html>
<html>
    <body>
        <div>
            <span id="foo">Hello, world!</span>
            <span id="bar">This was an example!</span>
        </div>
    </body>
</html>
from dataclasses import dataclass, field
from lxml import etree


PARENT_TAG = None


@dataclass
class Tag:
    tag: str
    attrib: dict = field(default_factory=dict)
    parent: object = None
    _text: str = None

    @property
    def text(self):
        return self._text

    @text.setter
    def text(self, value):
        self._text = value
        self.element.text = value

    def __post_init__(self):
        self._make_element()
        self._append_to_parent()

    def write(self, filename):
        etree.ElementTree(self.element).write(filename)

    def _make_element(self):
        self.element = etree.Element(self.tag, attrib=self.attrib)

    def _append_to_parent(self):
        if self.parent is not None:
            self.parent.element.append(self.element)

    def __enter__(self):
        global PARENT_TAG
        if PARENT_TAG is not None:
            self.parent = PARENT_TAG
            self._append_to_parent()
        PARENT_TAG = self
        return self

    def __exit__(self, typ, value, traceback):
        global PARENT_TAG
        if PARENT_TAG is self:
            PARENT_TAG = self.parent