python - 如何使用 Python docutils 创建简单的 html 标签
问题描述
我正在为 Pelican 开发一个库,我目前正在为此使用 reStructuredText 和 docutils。
我想要做的是创建一个应该输出 html 的自定义指令。
我要输出的html是:
<div class="row">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h4 class="card-title">Regular header</h4>
<p class="category">Category subtitle</p>
</div>
<div class="card-body">
The place is close to Barceloneta Beach and bus stop just 2 min by walk and near to "Naviglio" where you can enjoy the main night life in Barcelona...
</div>
</div>
</div>
</div>
到目前为止,我创建了这个 Python 代码
from docutils import nodes
from docutils.parsers.rst import Directive
from pelican.rstdirectives import directives
class Row(Directive):
required_arguments = 0
optional_arguments = 0
final_argument_whitespace = True
option_spec = {}
has_content = True
def run(self):
# Raise an error if the directive does not have contents.
self.assert_has_content()
node = nodes.Element()
node.document = self.state.document
self.state.nested_parse(self.content, self.content_offset, node)
# entries = []
resultnode = nodes.container()
for i, child in enumerate(node):
para = nodes.paragraph()
para += [child]
resultnode.append(para)
# entry = nodes.container()
# entry.append(para)
# entries.append(entry)
resultnode.update_basic_atts({
"classes": ["row"]
})
# resultnode.append(nodes.container('', *entries))
return [resultnode]
class Card(Directive):
required_arguments = 0
optional_arguments = 0
final_argument_whitespace = True
option_spec = {
"header-title": str,
"header-category": str
}
has_content = True
def run(self):
# Raise an error if the directive does not have contents.
self.assert_has_content()
text = '\n'.join(self.content)
col = nodes.container()
col["classes"] = ["col-md-6"]
card = nodes.container()
card["classes"] = ["card"]
col.append(card)
card_header = nodes.container()
card_header["classes"] = ["card-header"]
card.append(card_header)
header_title = nodes.paragraph(text=self.options.get("header-title"))
header_title["classes"] = ["card-title"]
card_header.append(header_title)
header_category = nodes.paragraph(text="Category subtitle")
header_category["classes"] = ["category"]
card_header.append(header_category)
card_body = nodes.paragraph(text=text)
card_body["classes"] = ["card-body"]
card.append(card_body)
return [col]
def register():
directives.register_directive("card", Card)
directives.register_directive("row", Row)
它创建了这个 html:
<div class="row docutils container">
<div class="col-md-6 docutils container">
<div class="card docutils container">
<div class="card-header docutils container">
<p class="card-title">Regular header</p>
<p class="category">Category subtitle</p>
</div>
<p class="card-body">
Hello, world
</p>
</div>
</div>
</div>
所以有几件事我想知道:
- 如何
docutils container
从class
属性中删除?container
与主题container
css 类冲突。 - 如何创建简单的 html 元素,例如
h1
解决方案
container
您应该创建自定义节点类型,而不是重用。然后,创建 HTML 编写器的子类以输出您需要的标签。
推荐阅读
- android - 由于我的应用程序的后台通知导致三星设备上经常崩溃的消息
- android - 在 textview 中设置一些文本粗体,但不是全部
- php - POST 和 GET 在 Postmen 中有效,但 PUT 和 DELETE 无效
- c# - 在 ItemTemplate 字段中使用 C# 转换为 PDF 时出现问题
- python-3.x - 如何在 python 3 中创建一个简单的 HTTP 网络服务器,用生成的内容响应 GET 请求?
- python - Pygame角色移动方向
- regex - 使用 awk 正则表达式匹配字符串的问题
- angular - map() 没有返回我的 REST 调用结果的正确形式
- javascript - Angular 8 - 如何访问父组件的ng模板中使用的子组件的变量
- python-3.x - 如何在 Cython 中使用 memcpy