将原始 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