inc*_*ion 5 html swift vapor leaf
我需要在 Swift Vapor 应用程序中创建一个复杂的 html 表。
问题是:Leaf 似乎不支持对 #(somevar += 1) 之类的变量进行计数,也不支持将 #(somevar1 + somevar2) 之类的字符串变量连接起来
所以我决定在应用程序中创建我的复杂表并将其传输到变量内的 html 模板。(在 php 中我一直都习惯这样做)
在模板中,我将变量称为
#(table)
Run Code Online (Sandbox Code Playgroud)
但事实证明,当叶子转义所有变量时,我得到了纯 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>
Run Code Online (Sandbox Code Playgroud)
只是发现 #raw() 不查找变量,而只是打印出未转义的 {} 之间的内容。所以我仍然进入网站“#(table)”而不是我复杂的html-table。
所以现在我被困住了。如何将应用程序生成的 html 代码作为 html 放入模板?
可能我做的这一切都错了。如何在叶模板中获取 html 代码?或者我是否必须发送整个页面然后我自己,作为带有标题的http流......?
提前致谢,汤姆
更新
从 Vapor 3 开始#raw(<var>)
,--template=web
在创建您的 Vapor Leaf 项目时,默认情况下没有嵌入标签。我必须在我的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
}
Run Code Online (Sandbox Code Playgroud)
https://docs.vapor.codes/3.0/leaf/custom-tags/
此外,如果有人正在寻找可用标签的完整列表,您可以简单地TagRenderer
在蒸气依赖项中搜索,如果您想创建自定义标签,这是符合的协议:
希望这可以帮助
假设您没有接受用户输入来创建此表,您应该能够使用它:
#raw(table)
Run Code Online (Sandbox Code Playgroud)
这与 执行相同的操作#(table)
,但它不会转义 HTML,因此它将正确呈现。如果您这样做,请确保您不会让自己容易受到 XSS 攻击。