python - 您可以在 Flask/Jinja 中创建组件以插入到各种模板中吗
问题描述
假设我做了一个非常酷的搜索框布局,我想重用它
例如。
<div class='someClass'>
<input class='fancyInput'>
</div>
是否可以像在模板上扩展一样,在其他模板中重用该片段,但可以说是“导入”一个片段。就像 `{% extend %} 的保留
我想拥有可以重复使用但根据页面插入不同区域的 html 块。
目前,每次我想使用该 HTML 块时,我都必须对其进行硬编码。
这是一个伪 html/jinja 示例
片段
{% component fancyInput %} # not real jinja
<div class='someClass'>
<input class='fancyInput'>
</div>
{% endcomponent %}
然后让我们在某处的随机页面上说
<html>
<body>
<div class='container'><p>Some text!</p></div>
{% import component fancyInput}
</body>
</html>
呈现的 HTML 将是
<html>
<body>
<div class='container'>
<p>Some text!</p>
</div>
<div class='someClass'>
<input class='fancyInput'>
</div>
</body>
</html>
解决方案
Jinja2
使用宏。一旦定义了宏,就可以调用它来渲染元素。
因此,如果您在模板中定义宏,例如:
{% macro newComponent(text) -%}
<div class='container'><p>{{text}}</p></div>
{%- endmacro %}
然后可以在任何文件中调用它
{{ newComponent('Insert Text') }}
这是文档的链接
还有 Stack Overflow 上关于宏的帖子 使用 Jinja2 (Flask) 模板引擎的参数化可重用块
推荐阅读
- rust - 如何从智能合约中的 url 获取 json?
- ntlm - windows-authentication (NTLM) 每 15 分钟失败一次
- javascript - 从数字到 GMT 的正则表达式
- javascript - Firebase Firestore:将 .where() 与子集合一起使用
- kotlin - Groovy 的 findIndexValues 是否有 Kotlin 等价物?
- angular - Angular 8 路由器 - 语言前缀
- google-sheets - 谷歌电子表格编辑主副本所有副本都收到新信息
- c# - 使用 C# 动态加载 JSON 文件及其所有内容
- angular - 导出共享模块中的函数
- reactjs - 使用 useAuth0 钩子以编程方式登录用户并做出反应