使用外部模板导入和变量替换呈现降价的模板引擎。

markdown-subtemplate的Python项目详细描述


降价子模板

使用外部模板导入和基本变量替换呈现降价的模板引擎。在

动机

我们经常在数据驱动的服务器应用程序(典型的Flask应用程序)、允许我们编辑web内容的cmse(如WordPress)和甚至像Pelican这样的平面文件系统之间做出选择。在

它们以非此即彼的形式出现。你要么得到一个完整的数据库驱动的应用程序,要么得到一个CMS,但不是两者都有。这个项目的目的是帮助添加类似CMS的功能到你的数据驱动的web应用程序,甚至把它们作为静态降价文件来创作。在

其工作原理如下:

  1. 您可以编写标准的降价内容。在
  2. 可以共享降价内容并将其导入顶级降价中。在
  3. 当需要css类和其他专门化时,可以使用HTML片段,但一般情况下HTML是被避免的。在
  4. 将处理要在合并降价中替换的变量及其值的字典。在
  5. 降价内容将转换为HTML并嵌入到更大的网站布局中(例如,在Jinja2模板中)。在
  6. 不管内容的复杂性如何,都会缓存Markdown转换以获得非常高的性能。在

标准工作流程

编写降价内容,将其与其他降价文件合并,以HTML格式作为大型网站的一部分提供。在

使用

要使用这个库,只需安装它。在

pip3 install markdown-subtemplate

接下来,编写一个降价模板page.md

^{pr2}$

在web应用启动中注册模板引擎:

frommarkdown_subtemplateimportengine# Set the template folder so that when you ask for page.md # the system knows where to look.engine.set_template_folder(full_path_to_template_folder)

然后通过以下方式生成HTML内容:

data={'variable1':'Value 1','variable2':'Value 2'}contents=engine.get_page('page.md',data)

最后,传递要在较大页面上下文中呈现的HTML片段:

# A Pyramid view method:@view_config(route_name='landing',renderer='landing.pt')deflanding(request):data={'variable1':'Value 1','variable2':'Value 2'}contents=engine.get_page('page.md',data)return{'name':'Project name','contents':contents}

更大的网站模板会抓取内容并将其呈现,landing.pt

...
<div>
    ${structure:contents}
</div>
...

小心危险!在

此库仅供内部使用。它是为了帮助你添加CMS功能到你的应用程序。它是not接受用户输入并制作论坛之类的东西。在

为了实现最好的控制,可以在markdown中嵌入小的HTML片段(例如,添加CSS类或其他操作)。这意味着降价是在UNSAFE模式下处理的。如果向公众开放,它将允许脚本注入攻击。在

可扩展性

markdown-subtemplate有三个扩展轴:

  • Storage-从磁盘、数据库或其他地方加载降价内容。在
  • Caching-在内存中缓存生成的降价和HTML,或者您选择!在
  • Logging—如果您使用的是日志框架,请插入从库中记录消息的插件。在

有关详细信息和示例,请参见extensibility doc。在

嵌套降价

这个项目存在的原因之一是允许嵌套/导入降价文件,而不仅仅是将降价文本传递给降价库。在

如果有需要多次出现的页面片段,请创建一个可以在一个位置进行管理和版本控制的专用降价导入文件。方法如下:

在TEMPLATES/\u shared

所有导入的降价文件都位于TEMPLATES/_shared的子路径中,其中TEMPLATES是您在启动过程中设置的路径。在

TEMPLATES
    |- _shared
        |- contact.md
        |- footer.md
    |-pages
        | - page.md
        | - about.md

编写导入/共享的降价contact.md

Contact us via email [us@us.com](mailto:us.com) or on 
Twitter via [@us](https://twitter.com/us)

然后在您的页面中,例如page.md您可以添加一个import语句:

# Our amazing page

Here is some info **about the page**. It's standard markdown.

Want to contact us? Here are some options:
[IMPORT CONTACT]

And a footer:
[IMPORT FOOTER]

产生的降价只是用这些文件的内容替换IMPORT语句,然后通过一个降价处理程序将整个过程传递给HTML处理器。在

变量

{cd9>对某些变量的支持有限。鉴于此降价页面:

# Example: $TITLE$

Welcome to the $PROJECT$ project. Here are some details 
...

可以使用以下内容填充变量值:

data={'title':'Markdown Transformers','project':'sub templates'}contents=engine.get_page('page.md',data)

请注意,模板中的变量名必须全部大写。在markdown中缺少变量语句在数据字典中出现的将被忽略。在

要求

此库需要Python 3.6或更高版本。因为,f-yes!(f-串)。在

许可证

markdown-subtemplate是根据麻省理工学院的许可证分发的。在

作者

markdown_subtemplateMichael Kennedy编写。在

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

推荐PyPI第三方库


热门话题
java在TextView中对齐部分文本   带有iText和eTPKCS11的java PKCS#11签名。dll&SunPKCS11提供程序   java Intellij Idea找不到jar   java Chrome/Firefox和Jetty HTTPS   java我无法打包找不到的JavaFX应用程序模块   多线程Java:排序从异步任务检索的结果   java客户端/服务器socket不能与外部连接一起工作   java如何在单击“下一步”按钮时获取其他详细信息?   java组织。springframework。网状物客户RestTemplate应声明为@Bean,而plain@Autowired抛出错误   java如何绘制javax。摆动将ImageIcon转换为JavaFX。fxml呈现用户界面?   使用for循环的Java跟踪   java如何编码字符串以显示彩色文本(基于字符串中的前缀)   Java保存/打开文件对象   基于java复选框的搜索:使用尽可能多的“”动态生成准备好的语句作为选中复选框的计数   java为什么crawler4j随机挂起?