简单快捷的html生成器,具有自然的语法对应关系(python>html)。不需要模板。服务于没有依赖关系的纯pythonic库。

airium的Python项目详细描述


空气

双向HTML-python转换器。在

PyPI versionpipeline statuscoverage reportPyPI pyversionPyPI licensePyPI status

主要特点:

  • 简单,直截了当
  • 无模板(只有python,你可以告别所有的模板)
  • DOM结构严格由python缩进表示(使用上下文管理器)
  • 提供比常规模板更干净的html
  • 配备反向翻译:从html到python

使用airium编写html文件

基本html页面(hello world)

fromairiumimportAiriuma=Airium()a('<!DOCTYPE html>')witha.html(lang="pl"):witha.head():a.meta(charset="utf-8")a.title(_t="Airium example")witha.body():witha.h3(id="id23409231",klass='main_header'):a("Hello World.")html=str(a)# casting to string extracts the valueprint(html)

打印这样一个字符串:

^{pr2}$

div中的简单图像

fromairiumimportAiriuma=Airium()witha.div():a.img(src='source.png',alt='alt text')a('the text')html_str=str(a)print(html_str)
<div><imgsrc="source.png"alt="alt text"/>
    the text
</div>

表格

fromairiumimportAiriuma=Airium()witha.table(id='table_372'):witha.tr(klass='header_row'):a.th(_t='no.')a.th(_t='Firstname')a.th(_t='Lastname')witha.tr():a.td(_t='1.')a.td(id='jbl',_t='Jill')a.td(_t='Smith')# can use _t or textwitha.tr():a.td(_t='2.')a.td(_t='Roland',id='rmd')a.td(_t='Mendel')table_str=str(a)print(table_str)# To store it to a file:withopen('/tmp/airium_www.example.com.py')asf:f.write(table_str)

现在table_str包含这样一个字符串:

<tableid="table_372"><trclass="header_row"><th>no.</th><th>Firstname</th><th>Lastname</th></tr><tr><td>1.</td><tdid="jbl">Jill</td><td>Smith</td></tr><tr><td>2.</td><tdid="rmd">Roland</td><td>Mendel</td></tr></table>

只有一个子元素的链接快捷方式

New版本0.2.1

具有大量with语句的结构:

fromairiumimportAiriuma=Airium()witha.article():witha.table():witha.thead():witha.tr():a.th(_t='Column 1')a.th(_t='Column 2')witha.tbody():witha.tr():witha.td():a.strong(_t='Value 1')a.td(_t='Value 2')table_str=str(a)print(table_str)

您可以使用相当于以下内容的快捷方式:

fromairiumimportAiriuma=Airium()witha.article().table():witha.thead().tr():a.th(_t="Column 1")a.th(_t="Column 2")witha.tbody().tr():a.td().strong(_t="Value 1")a.td(_t="Value 2")table_str=str(a)print(table_str)
<article><table><thead><tr><th>Column 1</th><th>Column 2</th></tr></thead><tbody><tr><td><strong>Value 1</strong></td><td>Value 2</td></tr></tbody></table></article>

反向翻译

Airium配备了一个传送机[html -> py]。 它从给定的html字符串生成python代码。在

将反向转换器用作二进制文件:

调用命令行:

airium http://www.example.com

它将获取文档并将其转换为python代码。 代码调用airium语句来重现给定的html文档。 它可能会提供一个线索-如何为给定的 使用airium包的网页。在

要将翻译结果存储到文件中,请执行以下操作:

airium http://www.example.com > /tmp/airium_example_com.py

也可以解析本地html文件:

airium /path/to/your_file.html > /tmp/airium_my_file.py

您也可以尝试解析Django模板。如果不管用, 但可能不会有太多的问题需要解决。在

使用反向转换器作为python代码:

fromairiumimportfrom_html_to_airiumhtml_str="""\<!DOCTYPE html><html lang="pl">  <head>    <meta charset="utf-8" />    <title>Airium example</title>  </head>  <body>    <h3 id="id23409231" class="main_header">      Hello World.    </h3>  </body></html>"""py_str=from_html_to_airium(html_str)assertpy_str=="""\#!/usr/bin/env python# File generated by reverse AIRIUM translator (version 0.2.1).# Any change will be overridden on next run.# flake8: noqa E501 (line too long)from airium import Airiuma = Airium()a('<!DOCTYPE html>')with a.html(lang='pl'):    with a.head():        a.meta(charset='utf-8')        a.title(_t='Airium example')    with a.body():        a.h3(klass='main_header', id='id23409231', _t='Hello World.')"""

Transpiler限制

so far in version 0.2.1:

  • 翻译的结果不保留前导空格的确切数量 在<pre>标记中。它们在python代码中是缩进的。在

    当代码从python生成到html时,这不是问题。在

  • 虽然它保持了正确的标签结构,但transpiler没有 链接所有with语句,因此在某些情况下生成 代码可能会缩进很多。在

  • 不会太快

安装

如果需要新的虚拟环境,请致电:

virtualenv venv
source venv/bin/activate

激活后,您可以安装airium,如下所示:

pip install airium

要使用反向翻译-需要另外两个包,请运行:

pip install requests==2.24 beautifulsoup4==4.9

检查翻板机是否工作:

airium --help

Enjoy!

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

推荐PyPI第三方库


热门话题
iOS MDM注册配置文件请求/Profile使用java对证书进行签名   java如何调试GWT项目中的PHP文件   Mac和Windows之间的Java文件getFreeSpace差异   java从ArrayList进入JComboBox   ApacheKafka如何执行zookeeperserverstart。我的java程序中的bat文件?   JAXRS应用程序的java初始化   java如何为double覆盖compareTo方法?   使用进程动态运行java代码   sockets java。网SocketException:权限被拒绝openshift   java PorterduffXfermode:清除位图的一部分   其他线程中变量的java更改侦听器   java如何初始化接口实例以与父片段中的子片段通信   java Cordova插件在构建时出错,源代码1.6中不支持菱形运算符使用源代码7   java是学习编程的教育游戏吗?   在不同机器上使用JasperReports API运行代码时出现java问题   java Spring引导延迟Flyway序列化循环依赖   未为加密/解密初始化java密码