意甲
html代码转换器(使用Python构建Markdown到HTML的转换管道)
使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

介绍

在本系列文章中,我想向您展示如何构建自己的markdown到HTML生成器。该系列由三部分组成:

  • 第二部分通过一个模块扩展了实现的管线,该模块用于计算给定文章的预计阅读时间。

  • 这三部分中使用的代码都可以在GitHub上找到。

    项目构建

    Markdown是一个包,它允许您将markdown代码转换为HTML。之后我们用Flask产生静态文件。

    激活后,您可以使用pip安装requirements.txt中的依赖。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    posts包含生成的HTML文件,这些文件与应用程序根目录中posts目录中的文件相对应。

    此外,我们还创建了一个名为services的目录。该目录将包含我们在Flask应用程序中使用的模块,或者为它生成某些东西。最后,创建一个名为static的目录带有两个子目录images和css。自定义CSS文件和文章的缩略图将存储在此处。

    令人惊叹!我们完成了一般的项目设置。我们来看看Flask的设置。

    路由

    该文件定义了一个具有两个端点的基础版Flask应用程序。用户可以使用/route访问第一个端点返回索引页,其中列出了所有文章。

    接下来,我们通过向app目录中添加一个__init__.py,将其转换为一个Python包。此文件为空。如果您使用UNIX计算机,则可以从项目的根目录运行以下命令:

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    现在,我们创建两个模板文件index.html以及layout.html,都存储在templates/shared目录中。这个layout.html模板将用于单个博客条目,而index.html模板用于生成索引页,从中我们可以访问每个帖子。让我们从index.html模板开始。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    HTML文件的主体包含一个容器,其中包含Jinja2[2]逻辑,用于为每个post生成Bootstrap卡片[3]。您是否注意到我们不直接基于变量名访问这些值,而是需要将[0]添加到其中?这是因为文章中解析的元数据是列表。实际上,每个元数据元素都是由单一元素组成的列表。我们稍后再看。到目前为止,还不错。让我们看看layout.html模板。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    body中的容器仅定义一个h1标记。然后,我们提供给模板的内容被插入并呈现。

    正如上一节所承诺的,我们将查看自定义CSS文件style.css. 我们在static/css中找到该文件,并根据需要自定义页面。下面是我们将用于基础示例的内容:

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    最后但并非最不重要的是,左右两边的填充被删除。由于两边都有额外的填充,缩略图没有正确对齐,所以在这里删除它们。

    写文章

    在完成本文之后,我们需要在文章中添加一些元数据。此元数据添加在文章之前,并由三个破折号分隔开来---。下面是一个示例文章(post1.md)的摘录:

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    在我们的例子中,元数据由标题、副标题、类别、发布日期和index.html中卡片对应缩略图的路径组成.

    假设我们写完了文章。在我们可以开始转换之前,还有一件事要做:我们需要为我们的帖子生成缩略图!为了让事情更简单,只需从你的电脑或网络上随机选取一张图片,命名它为placeholder.jpg并把它放到static/images目录中。GitHub存储库中两篇文章的元数据包含一个代表图像的键值对,值是placeholder.jpg。

    markdown到HTML转换器

    首先,我们导入所需的所有内容并创建几个常量:

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    POSTS_DIR是以markdown编写的文章的路径。

    BLOG_TEMPLATE_文件存储layout.html的路径。

    base_URL是我们项目的默认地址,例如。https://florian-dahlitz.de.默认值(如果不是通过环境变量DOMAIN提供的话)是http://0.0.0.0:5000。

    在函数中,我们首先获取POSTS_DIR目录中所有markdown文件的路径。pathlib的awesome glob函数帮助我们实现它。

    注意:您可以在文档[4]中找到有关扩展的更多信息。

    我们启动for循环,并打印当前正在处理的post的路径。如果有什么东西出问题了,这尤其有用。然后我们就知道,哪个文章的转换失败了。

    变量url_html存储的字符串与url相同,只是我们在末尾添加了.html。我们使用此变量定义另一个称为target_file.的变量。变量指向存储相应HTML文件的位置。

    让我们转到for循环中的第一个with代码块。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    第二个with 代码块用于将第一个with 代码块中创建的文档写入目标文件。

    我们现在出了for循环,因此,我们遍历了posts目录中找到的所有posts并对其进行了处理。让我们看看generate_entries函数中剩下的三行代码。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    最后我们在函数generate_entries之后添加以下if语句。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    太棒了,我们完成了converter.py脚本!让我们从项目的根目录运行以下命令来尝试:

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    最后启动Flask应用程序并转到http://0.0.0.0:5000。

    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">

    太棒了,你完成了这个系列的第一部分!在本文中,您已经学习了如何利用Markdown包创建自己的Markdown to HTML生成器。您实现了整个管线,它是高度可扩展的,您将在接下来的文章中看到这一点。

    参考文献

    Bootstrap (http://getbootstrap.com/)

    Primer on Jinja Templating (https://realpython.com/primer-on-jinja-templating/)

    Bootstrap Card (https://getbootstrap.com/docs/4.4/components/card/)

    Python-Markdown Extensions (https://python-markdown.github.io/extensions/)

    Tweet

    英文原文:https://florian-dahlitz.de/blog/build-a-markdown-to-html-conversion-pipeline-using-python
    译者:阿布铥
    使用Python构建Markdown到HTML的转换管道nerror="javascript:errorimg.call(this);">
    顶一下()     踩一下()

热门推荐

发表评论
0评