首页 > 其他分享 >七天学会flask(六)---模板-转义(3)(第一天)

七天学会flask(六)---模板-转义(3)(第一天)

时间:2023-04-27 10:45:57浏览次数:30  
标签:__ name 渲染 flask 转义 --- 模板 jinjia

flask模板技术---转义

Jinja自动根据模板语法进行html渲染,但某些时候,我们不希望它进行渲染,原因在于一旦渲染,其结果并不是我们所期望的,比如下面这段html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>使用jinjia模板,变量需要被两对大括号括起来,例如: {{ name }}</p>
</body>
</html>

我所期望的是,当用户打开浏览器时,在页面里看到如下的内容

使用jinjia模板,变量需要被两对大括号括起来,例如: {{ name }}

下面是转义.py里的代码

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/', methods=['GET'])
def name():
    return render_template('转义.html')

if __name__ == '__main__':
    app.run(port=5500, debug=True)

运行app.py以后,访问http://127.0.0.1:5500/,得到的结果竟然是

 

我想要的 不见了,这是因为jinja在渲染时把这段视为表达式进行了渲染,而由于后端并没有提供name参数,因此渲染的结果就是什么都没有。

我的本意并不是在模板里渲染name,而是在页面里展示如何声明一个可以被渲染的变量,但jinjia不能明白我的本意,毕竟我没有任何额外的信息给它,这种写法就应当传递name参数进行渲染。

一个巧妙的解决办法是这样的

<p>使用jinjia模板,变量需要被两对大括号括起来,例如: {{ '{{ name }}' }}</p>

对于单个表达式,用上面的办法非常凑效,但对于大的段落,如果想暂时禁用jinjia进行渲染,需要使用{% raw %} 和 {% endraw %}

{% raw %}
    <ul>
    {% for item in seq %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
{% endraw %}

假设你现在就想在页面里展示这段模板里使用for循环的代码,显然你不希望它被jinjia渲染,那么就可以用 进行标记,在它与 之间的html代码将不会被jinja渲染。

效果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% raw %}
    <ul>
    {% for item in seq %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
{% endraw %}
</body>
</html>

 

 

标签:__,name,渲染,flask,转义,---,模板,jinjia
From: https://www.cnblogs.com/joyware/p/17358259.html

相关文章

  • 两天学会flask(六)---模板-上下文环境(3)(20分钟)
    flask模板---上下文环境在前面的示例中,想要在模板里显示数据,只能通过在render_template函数里传参数来解决。但对于flask的上下文变量和自定义上下文变量,则不必如此,你可以直接在模板里使用他们。1.request请求对象request,携带了大量有关请求的信息,比如请求的path,url,参数,你可以......
  • 无界微前端方案官方示例,main-vue 项目打包之后 访问index.html页面空包,控制台报资源错
    报错信息: 修改方案: publicPath:“./”修改为如上配置即可。......
  • WPF教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介WPF(WindowsPresentationFoundation)是微软推出的基于Windows的用户界面框架,属于.NETFramework的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。WPF初入门教程-从简单的步骤了......
  • python+playwright 学习-58 Jenkins上使用 Pipeline 运行 playwright 自动化脚本
    前言Dockerfile.focal可用于在Docker环境中运行Playwright脚本。这些镜像包括在Docker容器中运行浏览器所需的所有依赖项,还包括浏览器本身。playwright在linux系统上目前只支持Ubuntu系统的部分版本,centos和debian系统上是没法运行的。jenkins环境准备需安装2个跟d......
  • 界面控件DevExpress Blazor UI v22.2 - 支持.NET 7
    DevExpress拥有.NET开发需要的所有平台控件,包含600多个UI控件、报表平台、DevExpressDashboardeXpressApp框架、适用于VisualStudio的CodeRush等一系列辅助工具,该组件拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应用提供直观的解决方案,全面解决各种使用场......
  • Qt音视频开发41-文件推流(支持网页和播放器播放并切换进度)
    一、前言本功能最初也是有一些人提过类似的需求,就是能不能将本地的音视频文件,通过纯Qt程序推流出去,然后用户可以直接在网页上播放,也可以用各种播放器播放,然后还可以任意切换播放进度,其实说白了就是个文件服务器,用户通过网络地址访问以后,告诉对方当前是媒体文件就会自动播放,是其他......
  • 产品原型20-20230426
              ......
  • 递归比较两个字典差异-python dict different
    deffindDiff(d1,d2,path=""):forkind1:if(knotind2):print(path,":")print(k+"askeynotind2","\n")else:iftype(d1[k])isdict:......
  • EBS: APP-PER-50022: ORACLE 人力资源管理系统无法检索用户类型配置文件选项的值
    在PO模块设置的人员,点击“人员”功能菜单时,提示: APP-PER-50022。。。。。的错误。路径:PO》》设置》》人员。APP-PER-50022:ORACLE人力资源管理系统无法检索用户类型配置文件选项的值。请确保为您的责任正确设置此值。尝试解决方式(失败了):  PROFILE |     ......
  • 计算机网络----网络层
    《网络层概述》 来看一群网络,如果只是网络独立各自通信,那么只要实现物理层和数据链路层即可(一朵云中的多个节点通过交换机实现通信)如果想要实现这群网络之间的通信,则是网络层干的事情了(各个云之间通过路由器实现通信)《网络层需要解决的问题》  1.网络层提供两......