将原始 Markdown 文本传递给 Jade

Posted

技术标签:

【中文标题】将原始 Markdown 文本传递给 Jade【英文标题】:Passing raw Markdown text to Jade 【发布时间】:2011-11-24 20:45:06 【问题描述】:

我正在玩我的第一个 Node.js Express 应用程序,正如每个程序员都知道的那样,在测试新框架时首先应该构建一个博客!无论如何,我想用 Markdown 写文章,然后在视图中渲染。我看到 Jade 允许使用过滤器在视图本身内部完成此操作,但我无法使其正常工作。

为了简化情况,这里是我所说的一个例子。

//app.js
res.render("article", 
    md : "Hello World!\n\n*Woo*"
);

//article.jade
section
    :markdown
        #md

但是,这会输出:<section><h1>md</h1></section>... 它没有替换我传递给它的变量。

然后我尝试了这个:

//article.jade
section
    :markdown
        !md

输出是这样的:

<section><p>Hello World!

*Woo*</p></section>

所以,现在它不解析降价!

我已经能够通过解析app.js 文件中的markdown 然后将html 传递给视图来显示,但我不知道,这似乎有点混乱。

有没有办法将变量传递给 Jade 过滤器?

【问题讨论】:

你有没有找到一个好的解决方案? 只是为了补充为什么这不能开箱即用,过滤器在编译时运行,这意味着它们不支持动态内容。正如此页面上的警告所说:jade-lang.com/reference/filters 【参考方案1】:

您可以使用从节点传递给翡翠的函数来做到这一点:

var md = require("node-markdown").Markdown;

然后将其作为本地传递到视图中:

res.render('view',  md:md, markdownContent:data );

然后调用函数在翡翠视图中渲染:

!= md(markdownContent)

【讨论】:

【参考方案2】:

节点模块node-markdown 已弃用。 marked 是高级新版本。你可以这样试试

var md = require('marked');

在您的路由器内部

res.render('template',  md: md );

在你的玉模板里面

div!= md(note.string)

【讨论】:

【参考方案3】:

我不认为玉可以开箱即用。实现它的一种方法可能比预渲染 markdown 稍微干净一些,它是创建一个名为 markdown 的辅助函数,它接受一个 markdown 字符串并返回 HTML。然后你可以做类似的事情

section
    != markdown(md)

markdown函数在渲染jade模板时应该包含在locals数据中,可以直接使用markdown库将markdown语法转换为HTML。

【讨论】:

解决此问题的好方法...有没有人尝试过影响基准测试? 所以,他们决定实现一个专用的:markdown 过滤器,但没有选择提供将外部 Markdown 文件加载到此过滤器的机制? ಠ_ಠ【参考方案4】:

如果您使用的是Scalate's Jade support,您可以输入:

section
    :&markdown
        #md

您还可以通过以下方式导入外部文件:

section
    :&markdown
        #include("MyFile.md")

【讨论】:

我认为这个答案不正确。我确实赞成,因为你让我很兴奋。但是随着进一步的研究,我找不到任何 Node js Scala 实现。现在语法很棒,我喜欢这个主意,但我认为时机未到,但...... 这可能不是您正在寻找的答案,因为它在 JVM 上的 Scala 下而不是 node.js 下运行,但如果您使用的是 Scalate 的 Jade 支持和链接我的答案的顶部将您带到有关此的文档。

以上是关于将原始 Markdown 文本传递给 Jade的主要内容,如果未能解决你的问题,请参考以下文章

将表单与原始输入传递给服务层

markdown 将Gravity Forms作为变量传递给Twig / Timber

markdown 将Gravity Forms作为变量传递给Twig / Timber

如何将文本字段数据从 Struts 2 中的 ajax 操作传递到原始调用 .jsp?

将原始 SQL 查询传递给 Laravel 上的查询构建器

通过 Shiny Server 将 Shiny 输入传递给 R markdown