在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”。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在Java中创建固定大小的泛型数组?   javascript Paypal Braintree订阅付款   使用BufferedReader和PrintWriter实现java数据持久化?   类似于iCloud的java唯一google id   java使用网格布局和抓取组合框   java我的while循环无限运行,当我检查它时,它说while循环没有主体,而我认为它显然没有主体   java LWJGL碰撞3D OpenGL   java将Tibco RV切换到WebSphere MQ?   java如何使用Postman从curl发布REST   java是超级的,在通用通配符中是独占的吗?   在swing 1.5中,java在指定时间后自动关闭非模态对话框   java PrimeFaces饼图在JSF 2.0中不显示   java如何在Spring MVC中提供带有xml配置的默认bean实现?   java在eclipse中使用按钮关闭JFrame   java Sqoop jar已弃用   Java中的Getter方法