分享

模板templates(17)

 星座小知识 2023-05-27 发布于浙江

  • 废话连篇


最近看了一部新出的神话剧--《琉璃》,与几年前的《花千骨》非常像,不过《花千骨》是多个男主同时围绕一个女主进行开虐,东方彧卿向来世借来五年寿命,只为再陪小骨一年,他与异朽阁定下契约,哪怕六界尽毁也要救小骨出蛮荒,换来自己世世早逝早夭,五识尽丧不得好死。最后替小骨挡了一掌,灰飞烟灭。杀阡陌拥有六界第一美男的称号,且爱美成癖,曾经为了小骨杀上长留,并喊话白子画,你若敢为你门中弟子伤她一分,我便屠你满门,你若敢为天下人损她一毫,我便杀尽天下人!,最后为救小骨,功力散尽,六界第一美男瞬间白发苍苍,皱纹满面。以后小骨再怎么吹口哨,她的杀姐姐也不会出现了。虐女主:爱我的,为我而死,我爱的,却一心想要我死。我信的,背叛我,我赖的,舍弃我。由白子画亲手刺下101剑,一开始,花千骨是又吃惊又绝望,但是很快她就淡然了,因为白子画的毒已经解了主:封住小骨的洪荒之力,承受洪荒之力的反噬之苦。小骨承受六十四根销魂钉。当时流传的一句话:白子画有10颗糖,他给了小骨1颗,而东方只有1颗糖,全给了小骨,杀阡陌没有糖,但是只要小骨想吃,他可以翻遍天下为她找糖。这部电视剧应该是在我近几年印象最深的一部剧了,为此还迷上了赵丽颖演的所有电视剧,或许喜欢的是她在这个电视剧中的角色与演技吧。
《琉璃》就主要是可劲的虐男主了,各种被女主误会,然后就是一直被女主捅剑,各种花式吐血,几乎男主每集都在吐血,这个戏的90%的血包估计都是给男主预备的。以至于最后男主说出了“褚璇玑,你始终是个没有心的人”。心灰意冷,从此眼里无光,但还是在为女主做着一切。。。。。


  • 正文介绍

这一章节主要是讲解如何利用templates生成具有一定复杂结构、动态的web页面。
在Flask中,模板是作为单独的文件编写的,存在应用程序包内的templates文件夹下。即在工作路径下创建该文件夹:

在此目录下创建一个名为index.html的文件app/templates/index.html

<html>

    <head>

        <title>{{ title }} - Microblog</title>

    </head>

    <body>

        <h1>Hello,{{ user.username }}!</h1>

    </body>

</html>

这是一个标准的、简单的HTML页面,其中{{...}}花括号,在这儿代表的是个占位符,作用是将表达式打印到模板进行输出。这些占位符表示HTML中可变的部分,并且只有在运行时才知道。接着我们对视图函数index()进行编辑,修改routes.py文件如下:

app/routes.py:使用render_template()函数

from app import app

from flask import render_template#从flask包中导入render_template函数

@app.route('/')

@app.route('/index')

def index():

    user = {'username':'Miguel'}

    return render_template('index.html'title='Home'user=user)

为了渲染模板,由从Flask包中导入的render_template()完成,此函数中的参数为模板文件名(index.html)、模板参数的变量列表,并返回相同的模板,不过其中的占有符都替换为实际值。

render_template()函数调用与Flask框架捆绑在一起的Jinja2模板引擎。Jinja2会用相应的值替换{{...}}块,这个相应的值由render_template()调用时提供的参数给出。

控制结构----if条件、for循环、继承
接下来将认识到更多 Jinja2在模板文件(HTML)中支持的更多强大操作:if条件、for循环、继承等。
if条件

   {% if title %}

           ...语句块

    {% else %}

            ...语句块

    {% endif %}

for循环


{% for post in posts %}

...语句块

{% endfor %}


模板继承

{% extends "base.html" %}

{% block content %}

    ...

{% endblock %}


Jinja2具有模板继承功能,完美解决上述问题。在实际操作中,将所有模板共有的页面布局部分移至基础模板中,其他模板则继承自它。实例如下,在app/templates目录下创建一个基础模板文件base.html。
app/templates/base.html带导航栏的基础模板

<html>

    <head>

        {% if title %}

            <title>{{ title }} - Microblog</title>

        {% else %}

            <title>Welcome to Microblog</title>

        {% endif %}

    </head>

    <body>

        <div>Microblog:<a href="/index">Home</a></div>

        <hr>

        {% block content %}

        {% endblock %}

    </body>

</html>

在上述基础模板中,块block 控制语句用于定义派生模板可自行插入的位置。块block 被赋予唯一的名字 content派生模板在提供其内容时可引用这个名称。


修改index.html这个模板,让其继承base.html模板。app/templates/index.html从基础模板继承

{% extends "base.html" %}

{% block content %}

    <h1>Hello,{{ user.username }}!</h1>

    {% for post in posts %}

        <div><p>{{ post.author.username }} says: <b>{{ post.body }}</b></p></div>

    {% endfor %}

{% endblock %}

base.html基础模板 实现处理常规页面的结构,则派生模板index.html简化大部分内容。

extends语句 建立了两个模板之间的继承关系,因此,Jinja2就会知道:当它被要求渲染index.html时,需要将其嵌入base.html中。这俩模板具有匹配的block语句 名称content,这就是Jinja2如何将两个模板合并为一个模板的方法。

                                写留言

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多