在 lektor 页面中嵌入媒体内容?

Embed media content in lektor pages?

我目前正在使用 Nikola 作为页面生成器。

但根据页面范围和用户的不同,Lektor 对于最终用户来说似乎更容易、更精简。这很适合我计划的新页面。

Nikola 还嵌入了媒体(youtube、vimeo、soundcloud 等) https://getnikola.com/handbook.html#restructuredtext-extensions

Lektor 是如何提供这样的功能的?

Lektor 尚未提供。通常使用 Lektor,您可以使用 Markdown 编写内容。您只需将 HTML 嵌入代码(来自 YouTube 或任何服务)直接粘贴到您的 Markdown 中即可。但是有一个刚刚发布的名为 lektor-embed-x 的插件可以满足您的需求。

是对的。由于 Lektor 的核心保持简单,与 Flask 非常相似,"core" 没有自动嵌入。

然而,本着 Flask 的相同精神,Lektor 是高度可扩展的。这也适用于它在 post 中解析 MarkDown 格式的文本并呈现最终的 HTML.

正如他所说,您可以直接将 HTML 中的可嵌入代码粘贴到其他 MarkDown 文本中。并且,它会被包含在最后的 as-is 中 HTML.

但是,我个人认为这损害了 MarkDown 的简单性和快速可读性的核心意图。

easy-to-read, easy-to-write plain text format

这就是为什么我觉得 lektor-embed-x where the writer will just write down the content's link in a seperate paragraph. This small piece of plugin will do the rest to the possible extent. It is basically a glue-library between embedXLektor 的必要性。

  • 如果内容是相对"popular"的站点,并且link格式可以,相关必要的embed-code将生成并包含在最终HTML中.
  • 如果不是,link 将导致常规 link,即 <a href=... link.

用法很简单

步骤 1 通过以下方式添加插件: $ cd path/to/lektor/project_folder $ lektor plugins add lektor-embed-x Package lektor-embed-x (0.1.2) was added to the project

就是这样。你准备好了。 [截至目前,没有添加配置。]

现在,在 post 中,您可以将 link 添加到其自身段落的一个段落中,无需任何特殊标记或 start-flag,在您的 MarkDown 格式中post如下。

contents.lr

title: About this Website
---
body:

This is a website that was made with the Lektor quickstart.

And it does not contain a lot of information.


# **HEADING 1**

## 2nd head

_italic slated text_

~~mess~~

whatever text i need to write.

https://twitter.com/codinghorror/status/686254714938200064

Below is how I can embed in a post.

http://www.youtube.com/watch?v=_lOT2p_FCvA


So, that was what i wanted to say.

通过 Lektor 生成最终的 HTMLs 后,上面的 post 将生成如下内容:

注意

请注意,这是一个非常新的 one-man 项目,正在积极开发中,刚刚结束 pre-alpha 阶段。因此,提供者或 link 格式不多。然而。但是,我希望它能在短时间内成熟。

如果您可以使用流,您当然也可以为您的媒体定义流块。这也允许通过管理员中显示的选项进行更多控制。例如,一个非常简单(无特色)的 youtube 流块可能如下所示:

flowblocks/youtube.ini:

[block]
name = Youtube
button_label = Youtube Video

[fields.ytid]
label = Video ID
type = string
width = 1/2

templates/blocks/youtube.html:

<iframe width="560" height="315" src="https://www.youtube.com/embed/{{this.ytid}}" frameborder="0" allowfullscreen></iframe>

这定义了一个名为 "Youtube Video" 的新块类型,内部名称为 "youtube"。用户必须输入 youtube 视频 ID(视频 url 中 ?v= 之后的 letters/digits),然后通过 this.ytid 引用在模板中使用。

使用此技术还可以添加更多选项。下面是一个几乎完整的示例。

flowblocks/youtube.ini:

[block]
name = Youtube
button_label = Youtube Video


[fields.ytid]
label = Video ID
type = string
width = 1/2

[fields.size]
label = Video size
type = select
choices = 560x315, 640x360, 853x480, 1280x720
choice_labels = 560 x 315, 640 x 360, 853 x 480, 1280 x 720
default = 560x315
width = 1/2

[fields.rel]
label = Show suggested videos when the video finishes
type = boolean
default = true
width = 1/4

[fields.controls]
label = Show player controls
type = boolean
default = true
width = 1/4

[fields.showinfo]
label = Show video title and player actions
type = boolean
default = true
width = 1/4

[fields.nocookie]
label = Enable privacy-enhanced mode
type = boolean
width = 1/4

templates/blocks/youtube.html:

<iframe width="{{ this.size.split("x")[0] }}" height="{{ this.size.split("x")[1] }}" src="https://www.youtube{{ "-nocookie" if this.nocookie }}.com/embed/{{this.ytid}}?{{ "rel=0&" if not this.rel}}{{ "controls=0&" if not this.controls }}{{ "showinfo=0" if not this.showinfo }}" frameborder="0" allowfullscreen></iframe>

在管理员中编辑时看起来像这样:

也许可以使用一些智能正则表达式来允许用户粘贴完整的 youtube urls,这样他们就不需要手动提取视频 ID。但是我还没试过。