【问题标题】:Swift Vapor Leaf deliver html in a variableSwift Vapor Leaf 在变量中提供 html
【发布时间】:2017-06-13 14:27:42
【问题描述】:

我需要在 Swift Vapor 应用程序中创建一个复杂的 html 表。

问题是:Leaf 似乎不支持像 #(somevar += 1) 这样的变量计数,也不支持像 #(somevar1 + somevar2) 这样的连接字符串变量

所以我决定在应用程序中创建我的复杂表并将其传输到变量内的 html 模板。 (在php中我一直都习惯这样做)

在模板中,我将变量称为

#(table) 

但事实证明,我得到的是纯 html 代码,因为叶子转义了所有变量。

但是有 #raw() 函数可以打印出普通的 html。

所以我愿意

<!DOCTYPE html>
<html lang="de">
<head><title>Server</title></head>
<body>
<..>

<form action="parameters" method="post">

// here is the thing: leaf gets a html table within the string 'table'.
// If I do it like that lead doesn't recognize #(table) as a leaf variable.
#raw( #(table) )

<button type="submit">Save</button>
</form>


</body>
</html>

只是发现#raw() 不查找变量,而只是打印出未转义的 {} 之间的内容。所以我仍然进入网站“#(table)”而不是我复杂的 html-table。

所以现在我被困住了。如何将 App 生成的 html 代码作为 html 放入模板中?

可能我做错了。如何在叶子模板中获取 html 代码?还是我必须自己发送整个页面,作为带有标题的 http 流......?

提前致谢, 汤姆

【问题讨论】:

  • 编辑它试图更清楚地指出我的问题......

标签: html swift vapor leaf


【解决方案1】:

假设您没有接受用户输入来创建此表,您应该可以使用它:

#raw(table)

这与#(table) 的作用相同,但它不会转义 HTML,因此它会正确呈现。如果您这样做,请确保您不会让自己容易受到 XSS 攻击。

【讨论】:

  • 我发现我必须使用不带 {} 的 #raw(table)。如果我包含 {},则结果为空白 (Leaf 2.0.1)。
【解决方案2】:

在蒸汽 4 中是:

#unsafeHTML(变量)

【讨论】:

    【解决方案3】:

    更新

    从 Vapor 3 开始,在创建 Vapor Leaf 项目时,#raw(&lt;var&gt;) 标签默认没有嵌入到 --template=web 中。我必须在我的configure.swift 文件中手动注册它:

    /// Leaf add tags
    services.register { container -> LeafTagConfig in
        var config = LeafTagConfig.default()
        config.use(Raw(), as: "raw")   // #raw(<myVar>) to print it as raw html in leaf vars
        return config
    }
    

    https://docs.vapor.codes/3.0/leaf/custom-tags/

    此外,如果有人正在寻找可用标签的完整列表,您可以简单地在蒸汽依赖项中搜索 TagRenderer,如果您想创建自定义标签,这是要遵循的协议:

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2019-05-06
      • 2020-06-05
      • 1970-01-01
      • 2017-02-08
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多