3.模板

模板

Flask框架默认使用Jinja2模板引擎,为了解决业务逻辑和表现逻辑

模板中的变量

<p>dictionary:{{mydict['key']}}</p>
<p>lsit:{{mylist[3]}}</p>
<p>list with index:{{mylist[myintvar]}}</p>
<p>Objcet's method:{{myobj.somemethod()}}</p>
#模板把变量的值变成首字母大写
Hello,{{name|capitalize}}

Jinja2变量过滤器
默认情况下,出于安全考虑,Jinja2会转义所有变量.
在这里插入图片描述
控制结构

{% if user %}
	Hello,{{ user }}!
{% else %}
    Hello,Stranger!
{% endif %}

for循环

<ul>
	{% for comment in comments %}
		<li>{{ comment }}</li>
	{% endfor %}
</ul>

Jinja2支持宏


{% macro render_comment(comment) %}
	<li>{{ comment }}</li>
{% endmacro %}
<ul>
	{% for comment in comments %}
		{{render_comment(comment)}}
	{% endfor %}
</ul>

重复使用宏

#把宏保存在单独的文件中,然后在需要使用的模板中导入
{% import 'macros.html' as macros%}
<ul>
	{% for comment in comments %}
		{{ macros.render_comment(commnet)}}
	{% endfor %}
</ul>

需要重复使用的模板代码可以单独保存,在多文件中引入

{% include 'common.html' %}

模板继承

#base.html
<html>
<head>
	{% block head %}
	<title>{% block title %}{% endblock %} - My Application</title>
	{% endblock %}
</head>
<body>
	{% block body%}
	{% endblock %}
</body>
</html>

衍生模板

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
	{{ super() }}
	<style>
	</style>
{% endblock %}
{% block body %}
<h1>Hello,world</h1>
{% endblock %}

*使用flask-bootstrap

pip install flask-bootstrap

初始化Bootstrap

{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
      <div class="navbar-header">
          <button type="button" class="navbar-toggle"
                  data-toggle="collapse" data-target=".navbar-collpase">
              <span class="sr-only">Toggle navigation</span>
              <span class="ico-bar"></span>
              <span class="ico-bar"></span>
              <spanclass="ico-bar"></span>
          </button>
          <a class="navbar-brand" href="/">Flasky</a>
      </div>
        <div class="navbar-collpase collpase">
            <ul class="nav navbar-nav">
                <li><a href="/" >Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    <div class="page-header">
        <h1>Hello,{{ name }}!</h1>
    </div>
</div>
{% endblock %}

在这里插入图片描述

目录结构

templates

404.html
500.html
user.html
index.html
base.html

hello.py

404.html

{% extends "base.html" %}
{% block title %}Flasky - Page Not Found{% endblock %}
{% block page_content %}
<div class="page-header">
    <h1>Not Found</h1>
</div>
{% endblock %}

500.html

{% extends "base.html" %}
{% block title %}Flasky - Page Not Found{% endblock %}
{% block page_content %}
<div class="page-header">
    <h1>Interval Error</h1>
</div>
{% endblock %}

base.html

{% extends "bootstrap/base.html" %}
{% block title %}Flasky{% endblock %}
{% block head %}
{{ super() }}
<link rel="shortcut ico" href="{{url_for('static',filename='favicon.ico')}}" type="image/x-icon">
<link rel="icon" href="{{url_for('static',filename='favicon.ico')}} "type="image/x-icon">
{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
      <div class="navbar-header">
          <button type="button" class="navbar-toggle"
                  data-toggle="collapse" data-target=".navbar-collpase">
              <span class="sr-only">Toggle navigation</span>
              <span class="ico-bar"></span>
              <span class="ico-bar"></span>
              <span class="ico-bar"></span>
          </button>
          <a class="navbar-brand" href="/">Flasky</a>
      </div>
        <div class="navbar-collpase collpase">
            <ul class="nav navbar-nav">
                <li><a href="/" >Home</a></li>
            </ul>
        </div>
    </div>
</div>
{% endblock %}

{% block content %}
<div class="container">
    {% block page_content %}{% endblock %}
</div>
{% endblock %}

user.html

{% extends "base.html" %}
{% block title %}Flasky{% endblock %}
{% block page_content %}
<div class="page-header">
    <h1>Hello,{{ name }}!</h1>
</div>
{% endblock %}

index.html

{% extends "base.html" %}
{% block page_content%}
<div class="container">
    <h1>Hello,World!</h1>
</div>
{% endblock %}

hello.py

from flask_bootstrap import Bootstrap
from flask import Flask,render_template
from flask_moment import Moment


app = Flask(__name__)
bootstrap = Bootstrap(app)
moment = Moment(app)

@app.route('/')
def index():
    return render_template('index.html')


@app.route('/user/<name>')
def user(name):
    return render_template('user.html',name=name)

@app.errorhandler(404)
def page_nof_found(e):
    return render_template('404.html'),404

@app.errorhandler(500)
def internal_server_error(e):
    return render_template('500.html'),500

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值