Rust Rocket启动报failing fairings:Templating 模板解析异常排查
问题原因
报错由Tera模板语法解析失败触发,核心原因是模板内存在未闭合的逻辑块:
- 代码中
{% if logged_in %}条件判断块没有编写对应的{% endif %}闭合标签。Tera要求所有逻辑控制标签(if/for/block等)必须成对闭合,解析器从if标签位置开始向后扫描匹配的endif,一直扫到文件末尾的</html>位置仍未找到对应标签,因此抛出expected tag or some content错误,最终触发模板初始化失败、Rocket启动终止。 - 你贴出的模板片段末尾缺失
</body>、</html>闭合标签,也会加剧解析错误(本地文件存在</html>标签但因逻辑块未闭合无法被正常识别)。
你的Rust业务代码src/main.rs没有逻辑问题,变量传递的写法符合Rocket与dyn_templates的用法规范,不需要修改。
修复方法
- 修正模板内的if块结构,在
{% else %}分支的<a href="/login">Login</a>代码后、</li>标签前添加{% endif %}标签,闭合条件判断逻辑。 - 补全模板末尾缺失的HTML闭合标签,保证HTML结构完整。
修复后的完整模板代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>{{title}}</title> </head> <body> <header> <nav> <div> <h1>Test</h1> </div> <!-- Add navigation bar here !--> <ul> <li> <a href="/about">About</a> </li> <li> <a href="/edit/{{title}}">Edit Page</a> </li> <li> {% if logged_in %} <a href="/user/{{user_name}}">{{user_name}}</a> {% else %} <a href="/login">Login</a> {% endif %} </li> </ul> </nav> </header> <main> <!-- Provide Title for your page here !--> <h1>{{title}}</h1> </main> </body> </html>
修改完成后重新启动项目,即可正常访问路由,context!宏传递的所有变量都能被模板正常渲染。
内容的提问来源于stack exchange,提问作者IcanCode
相关产品推荐
相关产品推荐

