flask框架模板jinja2

from flask import Flask,render_template
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app)

@app.route('/')
def index():
    return "this is index"


@app.route('/template')
def template():
    return render_template("file01.html",name="tom", age=19, list=[1,2,3,4,5,6])


def filter01(list):
    list.reverse()
    return list

#将自定义过滤器添加到app
app.add_template_filter(filter01,"filter")


#使用装饰器自定义过滤器
@app.template_filter(filter02)
def filter02(list):
    list.reverse()
    return list



if __name__ == "__main__":
    manager.run()

./templates/file01.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<br>
    {{ name }}
    {% for item in list %}
        {% if item%2 == 0 %}
            <li>{{ loop.revindex0 }}、{{ item }}</li>
        {% endif %}
    {% endfor %}
    过滤器
    {{ list | sum }}
    {% for item in list | reverse %}
        <li>{{ loop.index0 }}、{{ item }}</li>
    {% endfor %}
    自定义过滤器
    {{ list | filter }}
    自定义过滤器2
    {{ list | filter2 }}
    </br>
    宏<br>
    {% macro input(name1,name2) %}
        {{ name1 }}:<input type="text" name="name">
        {{ name2 }}:<input type="password" name="pwd">
    {% endmacro %}
    {{ input("账户","密码") }}
    <br>
    宏-代码复用 <br>
    {% import "file02.html" as f %}
    {{ f.input("用户名","密码") }}
    <br>
    代码复用-包含
    {% include "file03.html" ignore missing %}
    <br>
    特有变量<br>
    {{ config }}

    <br>
    特有函数<br>
    {{ request.url }}、{{ url_for('template') }}、{{ get_flashed_messages }}

    <br>
    代码复用-继承
    {% extends "file03.html" %}
    {% block top %}
        {{ super() }}
        <li>这是子模板的top代码</li>
    {% endblock %}



</body>
</html>

./templates/file02.html

{% macro input(name1,name2) %}
    {{ name1 }}:<input type="text" name="name">
    {{ name2 }}:<input type="password" name="pwd">
{% endmacro %}

./templates/file03.html

{% block top %}
    <li>这是父模板的top代码</li>
{% endblock %}
{% block content %}
    <li>这是父模板的content代码</li>
{% endblock %}

WTF表单

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, EqualTo

app = Flask(__name__)
app.config['SECRET_KEY'] = 'dsdhsjn92332'


class MyWtfForm(FlaskForm):
    username = StringField(label='用户名:', validators=[DataRequired('用户名不能为空')])
    password = PasswordField(label='密码:', validators=[DataRequired('密码不能为空')])
    repassword = PasswordField(label='确认密码:', validators=[DataRequired('确认密码不能为空'), EqualTo('password', '两次输入的密码不一致')])
    submit = SubmitField(label='注册')


@app.route('/index')
def index():
    my_form = MyWtfForm()
    return render_template("temp1.html", my_form=my_form)


@app.route('/reg', methods=['POST'])
def reg():
    my_form = MyWtfForm()
    username = my_form.username.data
    password = my_form.password.data
    if my_form.validate_on_submit():
        return "注册成功,用户名:%s,密码:%s" % (username, password)
    else:
        return "注册失败"


if __name__ == "__main__":
    app.run(debug=True)

./templates/temp1.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/reg" method="post">
    {{ my_form.csrf_token }}
    {{ my_form.username.label }}{{ my_form.username }}<br>
    {{ my_form.password.label }}{{ my_form.password }}<br>
    {{ my_form.repassword.label }}{{ my_form.repassword }}<br>
    {{ my_form.submit }}

</form>

</body>
</html>

81590738&t=1534066067218?mid=&wid=52319&sid=&tid=7431&rid=BEFORE_OPTOUT_REQ&t=1534066067218?mid=&wid=52319&sid=&tid=7431&rid=FINISHED&custom1=mp.csdn.net&t=1534066067219

猜你喜欢

转载自blog.csdn.net/sdzhr/article/details/81590738