博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask入门模板Jinja2语法与函数(四)
阅读量:5151 次
发布时间:2019-06-13

本文共 2883 字,大约阅读时间需要 9 分钟。

1 模板的创建

模板文件结构:

project/    templates/        模板文件

跳转模板一般使用:

from flask import render_template,render_template_string

render_template

return render_template('index.html') #将index.html页面的内容读取出来并进行响应

render_template_string

return render_template_string('

index

') #可以执行html标签语句

2 flask模板引擎Jinja2语法:

概述: 模板类似于MVC模式下的view视图层,模板引擎其实就是用来将模板同业务代码分离,并解析模板语言的程序.

比如模板代码

Hello template{% if name %}  

Hello {
{ name }}!

{% else %}

Hello flask!

{% endif %}

从上面例子可以发现:

模板表达式是包含在分割符{

{ }}内

模板控制语句都是包含在分割符{% %}中

模板注释都是包含在分隔符{# #}中

  1. 变量 : 视图传递过来的数据

    {

    { 变量名称 }}

  2. 标签 : 就是python中的循环\分支结构...

    {% 标签名称 %}

(1)表达式一般分为以下几种:

表达式种类 举例
变量(最常用) {
{ name }}
基础类型( 字符串,数值,列表,元祖,字典,布尔值) 一般配合表达式使用{
{ 'string' }}
运算表达式(算术与逻辑) {
{ False and True }} {
{ 2 + 3 }}
过滤器' | ' ,测试器' is ' 一般配合表达式
函数调用 {
{ func( ) }}
“in”操作符 {
{ 1 in [1,2,3] }}
字符串连接符”~” {
{ ~'like'~ }}

(2)控制语句一般有:

{% for user in users if not user.hidden %} {% if loop.first %} # 第一次if判定
User List:
{% endif %}
User No {
{ loop.index }}:
{
{ user.name }}
{% if loop.last %} #最后一次if判定
Total Users: {
{ loop.length }}
{% endif %}{% else %} #都不满足执行else
  • No users found
  • {% endfor %}

    if elif else

    {% if data.bool %}    {
    { data.bool }}为真{% elif data.none %} {
    { data.none }}为真{% else %} 以上都为假{% endif %}

    for in 循环

    {% for k,v in data.items() %}      
  • {
    { foo }}
  • {
    { data.abcd }}
  • {
    { k }}==>{
    { v }}
  • {% endfor %}

    和else搭配

    {% for in %}    ...{% else %}    ...{% endfor %}

    注意 : 当进行迭代的对象不存在时 则执行else

    Jinja2的循环内置变量获取当前迭代状态:

    变量 描述
    loop.index 获取当前迭代的索引,从1开始
    loop.index0 获取当期迭代的索引 从0开始
    loop.first 是否为第一次迭代,返回True或者False
    loop.last 是否为最后一次迭代 返回True或者False
    loop.length 迭代的长度
    loop.depth 当前循环在递归中的层级(从1开始)
    loop.depth0 当前循环在递归中的层级(从0开始)
    (3)忽略,转义,赋值
    {% raw %}#忽略模板语法    
      {% for k,v in items %}
    • {
      { k,v }}
    • {% endfor %}
    {% endraw %}Flask会对”.html”, “.htm”, “.xml”, “.xhtml”这四种类型的模板文件开启HTML格式自动转义。这样也可以防止HTML语法注入.{% autoescape false %} #将自动转义关闭

    Hello {
    { name }}!

    {% endautoescape %}{% set items = [1,5] %} #使用set关键字给变量赋值

    3 模板变量函数

    (1) 请求对象request : 它本身是一个字典,dict['key'] 或者是dict.get['key']

    表达式 含义
    request.method 获取请求的方法,post get
    request.form 获取表单数据
    request.args 请求的参数
    request.url 获取完整的请求url
    request.base_url 获取去掉传参的url
    request.host_url 获取主机名部分的url
    request.files 获取form表单文件上传的数据
    request.cookies 获取cookie信息
    request.headers 获取请求头信息

    (2) 会话对象session:本身也是一个字典

    session['user'] = u'张三'设置session需要设置秘钥app.secret_key = '123456'  或者在配置文件 app.config['SECRET_KEY'] = '123456'

    (3) url_for()函数:通过视图找到路由

    (4) with与set

    #set 添加变量{% set name='张三' %}#set也可赋值给列表或元组{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}

    with语句可以创建内部作用域,主要是起到隔离作用

    #在with该作用域下可以使用{% with num = 42 %}{
    { num }}{% endwith %}

    转载于:https://www.cnblogs.com/why957/p/9117415.html

    你可能感兴趣的文章
    MATLAB基础入门笔记
    查看>>
    【UVA】434-Matty's Blocks
    查看>>
    Android开发技术周报 Issue#80
    查看>>
    hadoop2.2.0+hive-0.10.0完全分布式安装方法
    查看>>
    django知识点总结
    查看>>
    C++ STL stack、queue和vector的使用
    查看>>
    使用Reporting Services时遇到的小问题
    查看>>
    约瑟夫问题
    查看>>
    Arduino 报错总结
    查看>>
    树莓派Android Things物联网开发:树莓派GPIO引脚图
    查看>>
    矩阵快速幂---BestCoder Round#8 1002
    查看>>
    js兼容公用方法
    查看>>
    如何将应用完美迁移至Android P版本
    查看>>
    【转】清空mysql一个库中的所有表的数据
    查看>>
    基于wxPython的python代码统计工具
    查看>>
    淘宝JAVA中间件Diamond详解(一)---简介&快速使用
    查看>>
    Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
    查看>>
    Kettle学习系列之Kettle能做什么?(三)
    查看>>
    【Mac + GitHub】之在另一台Mac电脑上下载GitHub的SSH链接报错
    查看>>
    Day03:Selenium,BeautifulSoup4
    查看>>