Flask实践Step by Step — 模板
admin
2023-07-30 21:43:11
0

Flask开发环境配置
Flask快速入门
Flask实践Step by Step — \’Hello World\’
Flask实践Step by Step — 模板
Flask实践Step by Step — Web表单

模板

在上节中Hello World的程序以及可以顺利运行,大概得目录结构如下:

  microblog/
  |-- app
  |   |-- __init__.py
  |   |-- __init__.pyc
  |   |-- static
  |   |-- templates
  |   |-- views.py
  |   `-- views.pyc
  |-- run.py
  `-- tmp

运行 python run.py 可以在浏览器中通过 http://127.0.0.1:5000访问

为什么使用模板

如果想在欢迎页面加入一些欢迎语,如果使用python来写HTML的话,需要修改一下 views.py中的
逻辑,具体的代码如下:

  from app import app

  @app.route(\'/\')
  @app.route(\'/index\')
  def index():
      user = {\'nickname\': \'Miguel\'}  # fake user
      return \'\'\'
  
    
      Home Page
    
    
      

Hello, \'\'\' + user[\'nickname\'] + \'\'\'

\'\'\'

保存,运行可以在页面中看到效果

使用模板

可以将HTML和python代码分离,我们需要写第一个模板(file app/templates/index.html)

  
  
    
      
      {{ title }} - microblog
    
    
      

Hello,{{ user.nickname }}

标准的HTML页面的内容,{{...}}是需要动态显示的内容,然后就需要修改对应的方法(file app/views.py)

  from flask import render_template
  from app import app

  @app.route(\'/\')
  @app.route(\'/index\')
  def index():
      user = {\'nickname\': \'Miguel\'}  # fake user
      return render_template(\'index.html\',title = \'Home\',user = user)

然后运行看一下效果,
为了渲染模板,需要引入 render_template,这个方法第一个参数就是需要渲染的文件名,运行时会
自动到 templates文件夹中去寻找对应的文件,后面是参数的list
模板中的控制逻辑
在Jinja2模板中支持控制逻辑 需要包含在 {% ... %}块中,修改一下 app/templates/index.html
加入一下控制逻辑

  
  
    
      
      {% if title %}
      {{ title }} - microblog
      {% else %}
      Welcome to microblog
      {% endif %}
    
    
      

Hello,{{ user.nickname }}

可以把 app/views.py中的title的参数去除运行看一下实际的效果

在模板中加入循环逻辑

修改一下 app/views.py,手动加入一些测试的数据信息

  from flask import render_template
  from app import app

  @app.route(\'/\')
  @app.route(\'/index\')
  def index():
      user = {\'nickname\': \'Miguel\'}  # fake user
      posts = [
          {
              \'author\':{\'nickname\':\'John\'},
              \'body\':\'Beautiful day in Beijing!\'
          },
          {
              \'author\':{\'nickname\':\'Kevin\'},
              \'body\':\'The Aveengers movie so cool!\'
          }
      ]
      return render_template(\'index.html\',title = \'Home\', user = user , posts = posts)

为了渲染这个list中的数据,需要修改一下模板中的结构 (file app/templates/index.html)

  
  
    
      
      {% if title %}
      {{ title }} - microblog
      {% else %}
      Welcome to microblog
      {% endif %}
    
    
      

Hello,{{ user.nickname }}

{% for post in posts %}

{{ post.author.nickname}} says: {{ post.body }}

{% endfor %}

模板继承

通常一个网站会有对应的导航栏和头部以及尾部信息,我们不希望在每一个页面中都要重新写一遍
这可以考虑将这些公有的信息统一放在一个公有的模板页面中其他的页面只需要继承这个页面即可
在Flask中的木耙支持继承,首先我们需要一个base模板(file app/templates/base.html)

  
  
    
      
      {% if title %}
      {{ title }} - microblog
      {% else %}
      Welcome to microblog
      {% endif %}
    
    
      
Microblog : Home

{% block content %}{% endblock %}

在这个模板中,使用block是需要继承的地方,Blocks需要一个唯一的名字,不能有重复,block
的内容会被子模板替换
修改一下 index.html继承base.html

  {% extends \"base.html\" %}
  {% block content %}
    

Hi,{{user.nickname}}

{% for post in posts %}

{{ post.author.nickname }} says: {{ post.body }}

{% endfor %} {% endblock %}

使用关键字extends来继承base模板

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...