将原始 Markdown 文本传递给 Jade

发布于 2024-12-06 10:56:08 字数 798 浏览 1 评论 0原文

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

为了简化情况,下面是我正在讨论的一个例子。

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

//article.jade
section
    :markdown
        #{md}

但是,输出如下:

{md}

...它没有替换我传递给的变量它。

然后我尝试了这个:

//article.jade
section
    :markdown
        !{md}

输出是这样的:

<section><p>Hello World!

*Woo*</p></section>

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

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

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

I'm playing around with my first Node.js Express application, and as every programmer knows, the first thing you should build when testing out a new framework is a blog! Anyway, I'd like to write the articles in Markdown and then render it in the view. I saw that Jade allows for this to be done inside the view itself, using filters, but I can't get that working.

To simplify the situation, here's an example of what I'm talking about.

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

//article.jade
section
    :markdown
        #{md}

But, that outputs this: <section><h1>{md}</h1></section>... it isn't substituting in the variables I've passed to it.

Then I tried this:

//article.jade
section
    :markdown
        !{md}

And the output is this:

<section><p>Hello World!

*Woo*</p></section>

So, now it's not parsing the markdown!

I have been able to get this to work by parsing the markdown in the app.js file and then passing the HTML to the view to display, but I don't know, that seems a bit messier.

Is there a way to pass variables into Jade filters?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

酷遇一生 2024-12-13 10:56:08

您可以使用从节点传递到jade的函数来完成此操作:

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

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

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

然后通过调用该函数将其渲染在jade视图中:

!= md(markdownContent)

You can do this with a function passed in to jade from node:

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

Then pass it into the view as a local:

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

Then render it in the jade view by calling the function:

!= md(markdownContent)
耶耶耶 2024-12-13 10:56:08

节点模块 node-markdown 已弃用。 标记为高级新版本。你可以这样尝试

var md = require('marked');

在你的路由器里面

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

你的玉模板里面

div!= md(note.string)

The node module node-markdown is deprecated. The marked is advanced new version. You can try like this

var md = require('marked');

Inside your router

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

Inside your jade template

div!= md(note.string)
凉宸 2024-12-13 10:56:08

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

section
    != markdown(md)

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

I don't think jade can do this out of the box. One way to accomplish it that might feel slightly cleaner than pre-rendering the markdown is to create a helper function called markdown that takes a markdown string and returns HTML. Then you could do something like

section
    != markdown(md)

The markdown function should be included in the locals data when you render the jade template and can directly use a markdown library to convert the markdown syntax to HTML.

沧桑㈠ 2024-12-13 10:56:08

如果您使用 Scala 的 Jade 支持,您可以输入:

section
    :&markdown
        #{md}

您还可以使用以下命令导入外部文件:

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

If you are using Scalate's Jade support you can enter:

section
    :&markdown
        #{md}

You can also import external files with:

section
    :&markdown
        #{include("MyFile.md")}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文