我们在编程的时候,往往会将一些功能封装成函数,以达到可以重复使用的目的,而对于web模板来说,我们也是可以写好一些基础内容框架,然后在之后重复使用的。

复用方法一:继承

这个我们之前有讲过,先写好一个基础的页面模板(如base.html),之后新的模板在这个基础模板上继承拓展,就可以减少重复写一些部分代码的工作了。

templates/base.html

<html>
    <head>
        <title>{% block title %}{% endblock %}</title>
        <link rel='stylesheet' href="{{ url_for('static',filename='style.css') }}">
        <script src="{{ url_for('static',filename='myfunction.js') }}"></script>
    </head>
    <body>
        <div class="nav">
            <a href='/'>Frog</a>
            <a href='/'>首页</a>
            <a href="{{ url_for('posts') }}">文章</a>
        </div>
        <div class='container'>
            {% block content %}{% endblock %}
        </div>
    </body>
</html>

我们在基础模板上用{% block name %}{% endblock %}的形式预留好位置,之后在子模板上就可以根据预留的位置放上一些新的内容了。

templates/index.html

{% extends 'base.html' %}

{% block title %}Index - Frog{% endblock %}

{% block content %}
<h1>hello world!</h1>
{% endblock %}

在新模板上用{% extends 'base.html' %}的形式声明需要继承的模板,如这个模板要继承base.html,那就在里面写上base.html即可。(这个地址是相对templates目录的)

然后在根据{% block name %}{% endblock %}预留的位置,填上新的内容即可。

复用模板二:组件化

组件化的模板组织方式在一些php的cms上经常可以看到,可以这样理解:首先写好一个头部header.html,写好一个尾部footer.html,而index.html则可以通过header.html+index content+footer.html来表示。

templates/header.html

<html>
    <head>
        <title>{{ title }}</title>
        <link rel='stylesheet' href="{{ url_for('static',filename='style.css') }}">
        <script src="{{ url_for('static',filename='myfunction.js') }}"></script>
    </head>
    <body>
        <div class="nav">
            <a href='/'>Frog</a>
            <a href='/'>首页</a>
            <a href="{{ url_for('posts') }}">文章</a>
        </div>
        <div class='container'>

templates/footer.html

        </div>
    </body>
</html>

templates/index.html

{% include 'header.html' %}
<h1>hello world!</h1>
{% include 'footer.html' %}

在模板中,通过{% include ‘template.html' %}的方式引入一个部分的代码。

而像title这种不同页面可能有变化的,就可以在路由函数中渲染页面时传入

frog.py

@app.route('/index')
def index()
    return render_template('index.html',title='Index - Frog')

其他

以上就是模板复用的常见方式了,而搭配上模板中的宏macro还可以设计更多复杂的功能呢。如果有什么错误或疑问的话欢迎在评论区里讨论一下。

评论

Felix 管理员

仓库地址: http://codemole.cn/felix/Frog/src/frog3.6

回复

  • 最新随笔

  • 尝试让DALLE生成一些连续的精灵图,让gpt帮忙生成一些提示词,如果能稳定输出的话就很强大了。
    让gpt帮忙生成的DALLE提示词
    "Generate a pixel art sprite sheet of a character walking in four directions (north, south, east, west) in a retro video game style."
    "Create a series of pixel art frames showing a character performing different actions like walking, running, jumping, and attacking in a classic 2D game aesthetic."
  • 路过别人山庄的门口,被一条大黑狗边叫边追过来,幸好骑电动车,不然还不一定跑得过,哈哈哈哈哈哈哈哈哈哈。
  • 最近两周也没咋出去玩,主要也是觉得没啥好玩的(笑哭)。看完布莱恩阿瑟的《复杂经济学》后,里面那个酒吧问题勾起我的兴趣,最近空了就花了些时间实现个python版本,顺便搞了篇博文,很享受这种新知识能和已有知识碰撞的感觉。(配张前段时间拍的图片,梧桐山门口前面那条路,挺漂亮的)
  • 盐田港夜景
  • 为啥这猫总喜欢喝杯子里的水
  • 确实开始冷了,在树林里至少要比人类聚集区低个几度,进出入口就能很明显感觉到。看看深圳水库的风景,貌似后面的视野更开阔。
  • 给随笔加了多图的功能,传一传周末拍的风景图,漫无目的的逛也挺好玩的。
  • 逻辑自洽是一套体系的根基,最根本的因素,最吸引人的地方