フラスコテンプレートの詳細な説明と例

																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																											## Flask模板

1.Jinja2とレンダリング方法

Flaskに一致するテンプレートは、同じ作成者であるjinja2です。

rander_templateを使用してテンプレートをレンダリングします。すべてのテンプレートはテンプレートに配置されます。rander_template(ファイル名、レンダリングするコンテンツ)、{ {}}を使用してWebページのデータベースのコンテンツを読み取ります

コンテンツを見る

from flask import Flask, render_template

#创建Flask对象
app = Flask(__name__)
#需要渲染的内容,此部分内容一般从数据库中抓取
content = {
    
     
	'name':'kk',
	'age':18,
	'sex':1

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

Webコード

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>{
    
    {
    
    name}}</h1>
    <h2>{
    
    {
    
    age}}</h2>
    <h3>{
    
    {
    
    sex}}</h3>
</body>
</html>

2.テンプレートフィルター

テンプレートフィルターは、バックエンドから渡された一部のデータに対していくつかの判断を下すことができます。
通常、パイプ記号|を使用します。{ {variable | condition}}などの
コンテンツを表示する

from flask import Flask, render_template

app = Flask(__name__)
#此参数设定后,只要模板变化,flask会自动刷新
app.config['TEMPLATES_AUTO_RELOAD'] = True


content = {
    
    
    'name': 'kML',
    'age': 20.5,
    'books': {
    
    
        'python': 30,
        'java': 20,
        'php': 10,
        'flask': -50
    },
    'input_content': '<input type = "text"  name ="text">'
}

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

index.htmlテンプレートコンテンツ

<div>
    <p>
        {
    
    # default 判断,若不存在username,则显示加载中 #}
        {
    
    {
    
    username|default('加载中')}}
    </p>
    <p>
        {
    
    # 计算input_content长度 #}
        {
    
    {
    
    input_content|length}}
    </p>
    <p>
        {
    
    # 关闭转义,再已确认input_content安全的情况下#}
        {
    
    {
    
    input_content|safe}}
    </p>
    <p>
        {
    
    # 系统默认转义打开,故此e/escape只有在转义关闭的时候使用 #}
        {
    
    {
    
    input_content|e}}
    </p>
    <p>
        {
    
    # replace(old,new),old表示name中存在的部分,new表示新的内容 #}
        {
    
    {
    
    name|replace('k','l')}}
    </p>
    <p>
        {
    
    # first:返回一个序列的第一个元素 #}
        {
    
    {
    
    name|first}}
    </p>
    <p>
        {
    
    # last:返回序列的最后一个元素 #}
        {
    
    {
    
    name|last}}
    </p>
    <p>
        {
    
    # join:将一个序列用d这个参数的值拼接成字符串,最后显示为k_m_l。 #}
        {
    
    {
    
    name|join(d='_')}}
    </p>
    <p>
        {
    
    # int:将值转换为int类型。 #}
        {
    
    {
    
    age|int}}
    </p>
    <p>
        {
    
    # float:将值转换为浮点数类型。 #}
        {
    
    {
    
    age|float}}
    </p>
    <p>
        {
    
    # lower:将字母转为小写。 #}
        {
    
    {
    
    name|lower}}
    </p>
    <p>
        {
    
    # upper:将字母转为大写。 #}
        {
    
    {
    
    name|upper}}
    </p>
    <p>
        {
    
    # truncate:截取length长度的字符串,length:表示显示长度,killwords:表示是否截断单词,leeway:偏差。 #}
        {
    
    {
    
    input_content|truncate(length=5,killwords=False,leeway=0)}}
    </p>
</div>

4.制御ステートメント

制御ステートメントは{%xxx%}で記述され、次のようにステートメントがendで終了する必要があります

{%for item in items%}
{%endfor%}


{%if condition%}
{%elif condition%}
{%else%}
{%endif%}

4.1、forループ

ビューコンテンツは2のビューコンテンツと一致しています

<div>
    {
    
    # for循环读字典内容 #}}
    <table>
        <tr>
            <td>序号</td>
            <td>书名</td>
            <td>价格</td>
        </tr>
        <tr>
            {
    
    % for key,value in books.items() %}
            {
    
    # loop.length:序列长度。loop.first/last:是否第一次/最后一次迭代,返回True或False #}
            {
    
    # loop.index:从1开始迭代。loop.index0:从0开始迭代 #}
            <th> {
    
    {
    
    loop.index}}</th>
            <th>{
    
    {
    
     key }}</th>
            <th>{
    
    {
    
     value|abs }}</th>
            <tr>
            {
    
    % endfor %}
        </tr>
    </table>
</div>
4.2、判断する場合

ビューコンテンツは2のビューコンテンツと一致しています

<div>
    {
    
    # if判断 #}
    <p>年龄多少:
        {
    
    % if age > 18 %}
            {
    
    {
    
    age}}
        {
    
    % else %}
            '不存在'
        {
    
    % endif %}
    </p>
</div>
4.3、マクロとインポートのインポート

マクロは、機能関数を定義するのと同等のhtml形式のテキストで運ばれます。htmlテキストはいつでもインポートして再利用できます。

#forms.html语法
{
    
    % macro 名称(变量1,变量2,变量3) %}
	{
    
    % for item in range(0,变量1) %}
		<input type="text">
	{
    
    % endfor %}
{
    
    % endmacro %}
#在html的界面中导入forms.html
{
    
    % from 'forms.html' import 名称 %}
{
    
    {
    
    名称(3)}}
4.4、ステートメントの包含と設定

includeステートメントは、テンプレートを別のテンプレートに導入します

{
    
    % include 'header.html' %}

setステートメントは、テンプレートに変数を追加します。with
ステートメントの変数は、withでのみ有効になります。グローバル変数と変数ありの変数は相互に影響しません

{
    
    % with %}
	{
    
    % set foo = 42 %}
	{
    
    {
    
     foo }}
{
    
    % endwith %}
#或者
{
    
    % with foo = 42 %}
    {
    
    {
    
     foo }}
{
    
    % endwith %}
4.5、テンプレートの継承

Flaskのテンプレートはブロックごとに定義されます。親テンプレートにブロックインターフェイスがある限り、子テンプレートはブロックごとに書き換えたり、元のテンプレートに追加したりできます。

フォーマット

{
    
    % extends "base.html" %}
{
    
    % block 名称 %}
<h1>xxx</h1>
{
    
    % endblock %}

親テンプレート

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title> {
    
    % block title %}
    {
    
    % endblock %} </title>
</head>
<body>
    {
    
    % block header %}
        <h1>base-header</h1>
    {
    
    % endblock %}
    {
    
    % block center %}
        <p>base-content</p>
    {
    
    % endblock %}
    {
    
    % block footer %}
        <h6>base-footer</h6>
    {
    
    % endblock %}
</body>
</html>

サブテンプレート

{
    
    % extends "base.html" %}
{
    
    % block center %}
    <p>这是content</p>
{
    
    % endblock %}
{
    
    % block footer%}
    <h6>{
    
    {
    
    name|upper}}</h6>
    <p>
        {
    
    % for item in books.item %}
        {
    
    % end for %}
    </p>
{
    
    % endblock %}

おすすめ

転載: blog.csdn.net/qq_37697566/article/details/105635190