Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog

目录

  • 目录
  • 前文列表
  • 扩展阅读
  • 使用 Bootstrap
  • 编写 Jinja 模板文件
  • 继承一个模板

前文列表

用 Flask 来写个轻博客 (1) — 创建项目
用 Flask 来写个轻博客 (2) — Hello World!
用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解
用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法
用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数

扩展阅读

Bootstrap 中文网

使用 Bootstrap

Bootstrap: 是一个基于 HTML/CSS/JavaScript 的前端框架, 兼容大部分的 jQuery 插件, 它简洁灵活, 提供了大量内置的样式接口,使得 Web 开发更加简单快捷.

  • 下载 Bootstrap

    • 点这里进入 Bootstrap 官方网站
    • 点击 Download Bootstrap
    • 再点击 Download Bootstrap
  • 使用 Bootstrap: 将下载的 ZIP 文件解压到项目文件夹下, 并重命名为 static.
    NOTE 1: 该 static 目录需要跟 main.py 在同一目录下, 这样 main.py 才能够找到这些文件.
    NOTE 2: 该 static 目录也会成为该项目中存放所有 CSS 文件/字体文件/图片文件/Javascript文件 的目录.

(env)fanguiju@fanguiju:/opt/JmilkFan-s-Blog$ ll static/
total 20
drwxrwxr-x 5 fanguiju fanguiju 4096 Nov 23 14:35 ./
drwxr-xr-x 7 fanguiju fanguiju 4096 Nov 23 14:35 ../
drwxr-xr-x 2 fanguiju fanguiju 4096 Nov 23 14:35 css/
drwxr-xr-x 2 fanguiju fanguiju 4096 Nov 23 14:35 fonts/
drwxr-xr-x 2 fanguiju fanguiju 4096 Nov 23 14:35 js/

编写 Jinja 模板文件

在对每个路由页面进行渲染时, 都会使用到一个 Jinja 模板, 而每一个 Jinja 模板文件中都含有类似的 HTML 代码(样式表/网页 meta 信息/共用的JS库文件). 我们当然不希望每次编写一个 Jinja 模板时, 都重复的编写这些 HTML 代码. 所以这里会应用到 Jinja 最强大的功能之一: 模板继承.

  • 先创建一个 templates 目录, 用于存放所有的 Jinja 模板文件

  • 创建一个 base.html 基础模板, 用于实现一个高重用的 HTML 文件基础代码.

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,, initial-scale=1"><!-- Will be replace the page title --><title>{% block title %}Home{% endblock %}</title><link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}"><!-- Macro: `render paginate` -->{% macro render_pagination(pagination, endpoint) %}<nav><ul class="pagination"><li>{% if pagination.has_prev %}<a href="{{ url_for('home', page=pagination.prev().page)}}" aria-label="Previous">{% else %}<a href="{{ url_for('home', page=1) }}" aria-label="Previous">{% endif %}<span aria-label="true">&laquo;</span></a></li>{% for page in pagination.iter_pages() %}{% if page %}{% if page != pagination.page %}<li><a href="{{ url_for(endpoint, page=page) }}">{{ page }}</a></li>{% else %}<li><a href="">{{ page }}</a></li>{% endif %}{% else %}<li><a>...</a></li>{% endif %}{% endfor %}<li><a href="{{ url_for('home', page=pagination.next().page )}}" aria-label="Next"><span aria-hidden="true">&raquo;</span></a><li></ul></nav>{% endmacro %}
</head>
<body><div class="container"><div class="jumbotron"><!-- Replace the route function to URL: `/` --><h1><a href="{{ url_for('home')}} ">JmilkFan's Blog</a></h1><p>Welcome to the blog!</p></div>{% block body %}body_content{% endblock %}</div><script src="{{ url_for('static', filename='js/jquery.min.js') }}"></script><script src="{{ url_for('static', filename='js/bootstrap.min.js') }}"></script>
</body>
</html>

可以通过继承某个基础模板来得到一个子模板, 在子模板中只需要替换掉基础模板中的一些标记段落, 就能够得到一个新的模板, 这与 Python 中继承的概念类似.

  • NOTE 1: 上述代码段中 {% block XXX %}old{% endblock %} 控制代码块的意义是标识出了该 Jinja 模板中可以被替换的部分. 在子模板继承时, 可以在子模版中实现 {% block XXX %}new{% endblock %} 语句,把父模板中的 block 控制代码块替换掉.
  • NOTE 2: 上述的代码中定义了一个宏 render_pagination(pagination, endpoint), 用于生成 Bootstrap 风格的分页链接列表. 宏定义要位于 HTML 代码的头部 <head>.
    • pagination: SQLAlchemy 的分页对象 flask_sqlalchemy.Pagination object
    • endpoint: 视图函数名(EG. post())

继承一个模板

要继承一个父模板, 需要在子模板中使用 extends 控制代码块.
现在在 home.html 中继承 base.html 模板.

{% extends "base.html"%}
{% block title %}JmilkFan's Blog{% endblock %}
  • NOTE: 现在的 home.heml 模板仅替换了 base.html 代码块中的 {% block title %}

最后
我们启动 Flask Server 服务并使用浏览器访问 http://127.0.0.1:5000 来查看一下 home.html 的页面。

用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板相关推荐

  1. 用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 实现所需要的视图函数 实现 home.html 模板 代码分析 实现效 ...

  2. 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 实现 post() 视图函数 在 post.html 中添加表单 效果 ...

  3. 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 视图函数 在 views.py 文件中定义视图函数 定义右侧边栏的视图 ...

  4. 用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 WTForms WTF 的基础使用 常用的字段类型 fields.Da ...

  5. 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 Jinja 中常用的过滤器 default float int len ...

  6. 用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Jinja 变量名 注释 控制语句 if 语句 循环 过滤器 ...

  7. 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...

  8. 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 PUT 请求 DELETE 请求 测试 对一条已经存在的 posts ...

  9. 用 Flask 来写个轻博客 (35) — 使用 Flask-RESTful 来构建 RESTful API 之四

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 POST 请求 身份认证 测试 前文列表 用 Flask 来写个轻博客 ...

最新文章

  1. 树莓派/PC实现实时摄像头数据共享(Python—OpenCV)
  2. centos6.8 yum mysql7_Centos6.8通过yum安装mysql5.7
  3. Scanner 中next()和nexline()方法的区别
  4. linux io 分析,Linux 下的I/O性能分析 iotop
  5. python对初学者的看法_python学习之道(1)——新手小白对print()函数的理解,Python,之路,一,浅谈...
  6. python解约瑟夫环问题
  7. mysqld_multi stop 不能停掉mysql
  8. python 硬件自动化测试_村长告诉你:Python实现性能自动化测试竟然如此简单
  9. Notes:DOM的事件模拟
  10. 计算机没wps云档怎么办,WPS云空间多大?WPS云文档空间已经用满怎么办?删数据或买VIP-太平洋电脑网...
  11. 总结使用SnakeYAML解析与序列化YAML相关
  12. 华为笔记本开发android,华为二合一笔记本支持Android可能是鸡肋!
  13. Android 项目必备(二十三)-->减小 APK 大小
  14. linux下无线USB网卡驱动安装
  15. FreeMarker生成word文档
  16. ultravnc,4款不能错过的ultravnc汉化版
  17. 高数——隐函数与参数方程求导
  18. 4个月转行做软件测试,我的薪资飙升300%
  19. 港大火星实验室最新工作:用于精确实时3D SLAM的高效概率自适应体素地图
  20. 【闪电搜索算法】基于闪电搜索算法求解单目标优化问题matlab代码

热门文章

  1. 9032c语言程序设计,2016年中国计量学院机电工程学院9032C语言程序设计考研复试题库...
  2. python twisted教程_python-twisted模块代码实例
  3. jira 审批流程_博兴县行政审批服务局推暖心服务工程 企业开办实现“全程网办”_博兴新闻...
  4. 面板什么都看不到 unity_杨幂今年第一封太敷衍!最新大片不露脸不秀身材,什么都看不到...
  5. linux mint系统分区,Win7删除了linuxmint的系统分区如何恢复
  6. 科学家利用脑机接口让患者正常发声
  7. 迪士尼公布最新研究:AR对象可智能地与环境中的物体交互
  8. 外国小哥恶搞:用ESP32单片机伪装成GPU,让朋友电脑中“勒索病毒
  9. 上汽接入Momenta飞轮,成为中国第一个落地RoboTaxi的车企
  10. 人人可用的AI大模型来了,“玩”TA还有奖金拿