Flask教程--第一个Flask应用:模板

Flask使用的是Jinja2作为模板引擎。当然,也可以使用其它模板引擎。

  • {% ... %} 用于流程控制语句

  • {{ ... }}用于输出内容到模板

  • {# ... #} 用于注释

  • #  ... ## 类似{% ... %}

<nav>
  <h1>Flaskr</h1>
  <ul>
    {% if g.user %}
      <li><span>{{ g.user['username'] }}</span>
      <li><a href="{{ url_for('auth.logout') }}">退出</a>
    {% else %}
      <li><a href="{{ url_for('auth.register') }}">注册</a>
      <li><a href="{{ url_for('auth.login') }}">登陆</a>
    {% endif %}
  </ul>
</nav>

一、变量

1.如果要访问变量的属性可以使用点(.),也可以使用[]符号.示例:

{{ foo.bar }}
{{ foo['bar'] }}

2.如果变量的属性不存在,那么 会返回空字符串.

3.可以直接在模板使用的全局变量

全局变量来源含义说明
configflask.config当前配置对象 
requestflask.request当前请求对象在没有请求上文的情况下渲染模板,则该变量不可用
sessionflask.session当前会话对象在没有请求上文的情况下渲染模板,则该变量不可用
gflask.g请求绑定的全局变量在没有请求上文的情况下渲染模板,则该变量不可用
url_for()flask.url_for()url反向解析函数 
get_flash_message()flask._get_flash_message()获取闪现的消息的函数 

二、过滤器

1.可以通过过滤器对变量的值进行修改.过滤器与变量用管道符(|)进行分隔.(同Django)

{{ name|striptags}}

2.可以同时使用多个过滤器.(同Django)

{{ name|striptags|title }}

3.使用圆括号给过滤器传递参数(区别:Django是使用冒号 : 给过滤器传递参数)

{{ my_variable|default('my_variable is not defined') }}

三、注释

模板使用 {# ... #} 注释.

{# note: commented-out template because we no longer use this
    {% for user in users %}
        ...
    {% endfor %}
#}

 四、继承

1.模板使用形如{% extends "base.html" %}的形式进行继承.extends标签应该是模板的第一个标签.

基本模板:base.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage</title>
    {% endblock %}
</head>
<body>
    <div id="content">{% block content %}{% endblock %}</div>
    <div id="footer">
        {% block footer %}
        &copy; Copyright 2008 by <a href="http://domain.invalid/">you</a>.
        {% endblock %}
    </div>
</body>

 子模板:

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
    {{ super() }}
    <style type="text/css">
        .important { color: #336699; }
    </style>
{% endblock %}
{% block content %}
    <h1>Index</h1>
    <p class="important">
      Welcome on my awesome homepage.
    </p>
{% endblock %}

2.同一个模板文件中,{% block %}{% endblock %}标签不能同名.模板文件中对block内容的调用,可以使用 {{ self.blockName() }}的方式。

{% block title %}注册{% endblock %}
{% block header %}
  <h1>你现在所处的页面是:{{ self.title() }}</h1>
{% endblock %}

 结果示例:

3.对父模板block内容的调用,可以使用{{ super() }}的方式

{% block sidebar %}
    <h3>Table Of Contents</h3>
    ...
    {{ super() }}
{% endblock %}

参考资料

[1]Flask templates,https://flask.palletsprojects.com/en/1.1.x/tutorial/templates/

[2]Jinja2:http://jinja.palletsprojects.com/en/2.10.x/templates/

[3]Jinja2中文文档:http://docs.jinkan.org/docs/jinja2/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值