首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift Vapor Leaf在变量中传递html

Swift Vapor Leaf在变量中传递html
EN

Stack Overflow用户
提问于 2017-06-13 22:27:43
回答 3查看 1.2K关注 0票数 5

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

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

因此,我决定在App中创建复杂的表,并将其传输到变量中的html模板。(在php中,我已经习惯了这样做)

在模板中,我会调用变量,如

代码语言:javascript
复制
#(table) 

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

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

我就是这么做的

代码语言:javascript
复制
<!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流?

先谢谢你,汤姆

EN

回答 3

Stack Overflow用户

发布于 2018-10-26 17:17:53

更新

从Vapor3开始,在创建Vapor Leaf项目时,默认情况下--template=web中没有嵌入#raw(<var>)标签。我不得不在我的configure.swift文件中手动注册:

代码语言:javascript
复制
/// 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
}

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

希望这能有所帮助

票数 6
EN

Stack Overflow用户

发布于 2017-06-20 19:31:41

假设您在创建此表时没有接受用户输入,您应该能够使用以下命令:

代码语言:javascript
复制
#raw(table)

这与#(table)做同样的事情,但是它不能避开超文本标记语言,所以它可以正确地呈现。只要确保这样做不会使自己容易受到XSS攻击即可。

票数 3
EN

Stack Overflow用户

发布于 2022-01-14 16:04:04

在蒸气4中是:

#unsafeHTML(变量)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44524372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档