第三方HTML渲染库
本文介绍了一些常用的 HTML渲染库。
htmlgenerator
地址: https://github.com/basxsoftwareassociation/htmlgenerator
安装
自 v0.5.2开始,django-echarts 已经内置 htmlgenerator 作为依赖库,无需额外安装。
创建元素
下面是一个简单的例子。
import htmlgenerator as hg
my_page = hg.HTML(hg.HEAD(), hg.BODY(hg.H1("It works!")))
print(hg.render(my_page, {}))
my_element = hg.DIV('This is a text.', _class='panel', id='my-div')
print(hg.render(my_element, {}))
说明:
- 在 htmlgenerator中,所有元素均是
htmlgenerator.BaseElement
的子类。 - HTML标签以大写字符串
- 子节点以位置参数传入
- 属性值以关键字参数传入
动态值
使用 htmlgenerator.render
函数可以对同一元素进行多次不同渲染。
my_div = hg.DIV("Hello, ", hg.C("person.name"))
print(hg.render(my_div, {"person": {"name": "Alice", "occupation": "Writer"}},))
print(hg.render(my_div,{"person": {"name": "John", "occupation": "Police"}},))
Django页面响应对象
BaseElement
类的 render
函数返回值可以直接传入 HttpResponse
。
from django.http import HttpResponse
def render_layout_to_response(request, layout, context):
return HttpResponse(layout.render(context))
与django-echarts
django-echarts 渲染模块内置支持 htmlgenerator.BaseElement
类型。因此
- 可以作为模板标签函数
dw_widget
的参数 - 可以作为
Container.add_widget
的参数,融入现有的组件体系
import htmlgenerator as hg
from django_echarts.entities import RowContainer
container = RowContainer()
header_div = hg.DIV(hg.H1('Page Title'), _class='header')
container.add_widget(header_div)