在python中重构html
phtml的Python项目详细描述
phtml是一个愚蠢的python库,它可以像使用模板一样在python中生成html,但是面向重构的是基于嵌套组件的pythonic react-like模式。
部件底座
基本组件类是node:
fromphtmlimportNodeform_layout=Node('form',# node.tag{# node.attrs'class':'foo',# node.attrs['class']'method':'POST',# node.attrs['method']},[# node.children'{{ form.as_p() }}',# node.children[0]Node('input',{'type':'submit'},selfclose=True),],)
将窗体布局转换为字符串将返回以下内容:
<form class="foo" method="POST"> {{form.as_p()}} <input type="submit" /> </form>
渲染
调用phtml.jinja.render(form_layout, form=YourForm())will时 返回上下文中用form处理的phtml输出,并生成 最终结果。
整个目的是将html生成逻辑重构为python组件:
fromphtmlimportForm,Submitform_layout=Form({'class':'foo'},['{{ form.as_p() }}',Submit())],)
动态导入
fromphtmlimportNodeform_layout=Node.factory('phtml.Form',{'class':'foo'},['{{ form.as_p() }}',Node('phtml.Submit')],)
为穷人祈祷和实现
如果你想为登录表单做一个好的布局,请不要重复 像这样枯燥而冗长的代码是因为在世界的某个地方,一只猫会 可能是因为另一个现实中的副作用或其他原因而死亡:
fromphtmlimportForm,Divyour_layout=Form(Div({'class':'row'},[Div({'class':'col m6 s12'},['{{ form["username"] }}']),Div({'class':'col m6 s12'},['{{ form["password"] }}']),]),)
富组件的重构
相反,使用可重复使用的组件制作一个漂亮的布局:
fromphtml.django.mdcimportForm,Row,Col,InputclassYourLoginForm(forms.LoginForm):_phtml=Form(Row(Col(m=6,s=12,Input('username')),Col(m=6,s=12,Input('password')),))
注意
有关每个组件的构造函数的文档,请 用python代码在他们的签名下填写他们的docstring,utsl!
愚蠢和愚蠢的基于上下文的渲染
您可以在jinja中(或者在没有花括号的python中)这样渲染: {{ form._phtml.jinja(form) }},因为所有呈现逻辑都应该已经是 在phtml。
谢谢
非常感谢你的阅读。希望这对任何人都是一个有用的例子 任务是“用python重构html”。