重庆cms建站系统,房天下官方网站,维护网址,asp模板网站修改文章目录 3 模板3.1 模板基本使用3.2 模板结构组织3.3 模板进阶 3 模板
模板#xff08;template#xff09;#xff1a;包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。
3.1 模板基本使用
HTML实体#xff1a;https://dev.w3.org/html5/htm… 文章目录 3 模板3.1 模板基本使用3.2 模板结构组织3.3 模板进阶 3 模板
模板template包含固定内容和动态部分的可重用文件。Jinja2模板引擎可用于任何纯文本文件。
3.1 模板基本使用
HTML实体https://dev.w3.org/html5/html-author/charref
Jinja2定界符
语句{% ... %}表达式{{ ... }}注释{# ... #} 注适度使用模板仅放和输出控制有关的逻辑操作。 补充render_template()中也可以传入python函数并在模板中调用。 上下文
在模板中定义变量使用set标签。p80内置上下文变量configrequestsessiong。自定义上下文app.context_processor 等p81
全局对象
Flask内置模板全局函数url_for()用于生产URLget_flashed_messages()用于获取flask消息。
自定义全局函数app.template_global()装饰器
过滤器修改和过滤变量值的特殊函数。
{{ name|title }}{% filter upper %}This itext becomes upperase.
{% endfilter %}Jinja2常用内置过滤器p83 自定义过滤器app.emplate_filter()
测试器测试变量或表达式返回布尔值 使用app.template_test()自定义。
{% if foo is sameas(bar) %}...模板环境对象控制渲染行为包含配置选项、上下文变量、全局函数globals、过滤器filters、测试器tests在app.jinja_env属性。
# 添加自定义全局对象
def bar():return I am bar.app.jinja_env.globals[bar] bar3.2 模板结构组织
局部模板减少代码重复。在ajax请求中可以只返回一个局部模板而不是整个页面。
{% include _banner.html %}宏macro类似函数也为了代码重用。
注意include会自动传递上下文而import不会需要显示传递。
{% from macros.html import qux with context%}
...
{{ qux(amount5) }}模板继承在基模板中定义基本的HTML结构而子模板只需要对特定的块进行修改覆盖或追加{{ super() }}。p90
{% extends base.html %}
{% block content %}
...
{% endblock content %}3.3 模板进阶
空白控制模板中的Jinja2语句会保留移除后的空行但不影响浏览器的解析。可以使用工具去除空白减小文件体积提高数据传输速度。
{%- endif %}加载静态文件默认存放在主脚本同级目录的static文件夹中使用url_for()函数获取。Flask内置了用于获取静态文件的视图函数端点值为static。
{{ url_for(static, filenameavatar.jpg) }}Favicon浏览器在标签页、地址栏、收藏夹等处显示的小图标。p96从CDN加载静态资源更方便可以创建一个专门用于加载静态资源的宏。 疑惑对favicon的请求是自动的吗所有项目都有 消息闪现在视图函数调用flash()函数你的消息将存储在session中然后再模板中使用全局函数get_flashed_messages()获取消息并显示调用后会清空session中的消息。
{% for message in get_flashed_messages() %}{{ message }}
{% endfor %}文本字符串编码问题p98
自定义错误页面默认的简陋错误页面往往另用户不知所措我们可以注册错误处理函数来自定义错误页面。
app.errorhandler(404)
def page_not_found(e):return render_template(errors/404.html), 404JavaScript和CSS中的Jinja有时需要再JavaScript或CSS代码中使用Jinja2提供的变量如我们希望将用户设置的主题颜色设置到对应的CSS规则中。 只有使用render_template()传入的模板文件才会被渲染而在javascript、css文件中引入的Jinja2代码不会被执行。 1、嵌入式Javascript/CSS在模板文件中使用style和script标签定义这部分代码。 2、定义为Javascript/CSS变量
{# 定义JavaScript变量 #}
script typetext/javascriptvar foo {{ foo_variable }};
/script{# 定义CSS变量 #}
sytle
:root {--theme-color: {{ theme_color }};
}