Flask 网站装潢, 简易更换模板

Flask 网站装潢,简易更换模板

本博文找个好看的网页模板,并简单改一改变成flask模板,并展示
主博客目录:《从零开始学习搭建量化平台笔记》


文章目录

  • Flask 网站装潢,简易更换模板
    • 下载模板
    • Python 自动生成目录
    • 修改目录结构
    • 改写模板文件
    • 改写Flask 相关函数
    • 模板网页预览
    • 遇到的坑
      • 出现白色框


主项目计划需要Flask展示可视化数据网站需要一个好看的主页。
任务:找一个好看的模板并改成Flask模板。

下载模板

在某乎上找了个下载免费模板的网站。(中文网站)

找一个自己喜欢的然后点击下载。

我用的是一个叫《Helios》的模板。

下载完他的目录是这样的:

Source:[./helios]
├---assets/├---css/├---fonts/├---js/└---sass/
├---images/├---header.jpg├---pic01.jpg├---......└---pic15.jpg
├---index.html
├---left-sidebar.html
├---LICENSE.txt
├---no-sidebar.html
├---README.txt
└---right-sidebar.html

Python 自动生成目录

这里为了写博客简单地写了个自动生成目录的python小脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-__author__ = "Varalpha"import os
import os.path
from pathlib import Pathdef printSingleDir(item, path, max_depth, this_depth, last_symb=("    ", "├---")):newpath = path / itemif os.path.isdir(newpath):print(f"{last_symb[0]}" * this_depth + f"{last_symb[1]}{item}/")if this_depth < max_depth:printdir4blog(newpath, max_depth, this_depth + 1)else:print(f"{last_symb[0]}" * this_depth + f"{last_symb[1]}{item}")return Nonedef printdir4blog(path, max_depth, this_depth=0):path = Path(path)if this_depth == 0:print("Source:[" + str(path) + "]")dir_list = os.listdir(path)for item in dir_list[:-1]:printSingleDir(item, path, max_depth, this_depth)if 0 != len(dir_list):printSingleDir(dir_list[-1], path, max_depth, this_depth, ("    ", "└---"))if __name__ == "__main__":path = input("输入遍历目录")depth = int(input("输入遍历深度"))printdir4blog(path, depth)

修改目录结构

创建文件

mkdir VarFlask
cd VarFlask
mkdir templates static
touch templates/index.html
touch templates/layout.html

修改进自己项目目录中,重新排了结构:

Source:[./code_web]
├---requirements.txt
├---runserver.py
├---VarFlask/├---static/├---css/├---fonts/├---images/├---js/└---sass/├---templates/├---index.html└---layout.html├---views.py└---__init__.py

这里把images和其他模板文件全部放入static/ 文件夹中。

改写模板文件

  1. 先把html的头文件抄好,并为之后增加补充做好预留{% block head %}{% endblock %}
<!DOCTYPE html>
<html lang="en">
<head><title>{{ title }} - Flask</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><meta name="description" content=""><meta name="author" content="Xiuchuan Zhang"><!-- CSS FILES --><link rel="stylesheet" type="text/css" href="/static/css/main.css" />{% block head %}{% endblock %}<!-- end -->
</head>
</html>

这里预留了个 title 参数。

  1. 再抄个页脚,并为之后增加补充做好预留{% block footer %}{% endblock %}
<!-- Footer -->
<div id="footer"><div class="container">{% block footer %}{% endblock %}<hr /><div class="row"><div class="col-12"><!-- Copyright --><div class="copyright"><ul class="menu"><li>&copy; 2023 - <a href="http://www.varalpha.com">VarAlpha Co.</a> All rights reserved.</li><li>Design: <a href="http://html5up.net">HTML5 UP</a></li></ul></div></div></div></div>
</div>
<!-- Footer End -->
  1. 把Scripts抄上,并为之后增加补充做好预留{% block scripts %}{% endblock %}
<!-- JAVASCRIPT FILES -->
<script src="/static/js/jquery.min.js"></script>
<script src="/static/js/jquery.dropotron.min.js"></script>
<script src="/static/js/jquery.scrolly.min.js"></script>
<script src="/static/js/jquery.scrollex.min.js"></script>
<script src="/static/js/browser.min.js"></script>
<script src="/static/js/breakpoints.min.js"></script>
<script src="/static/js/util.js"></script>
<script src="/static/js/main.js"></script>
<!-- END JAVASCRIPT FILES -->
{% block scripts %}{% endblock %}
  1. 最后写好Body, 并为之后增加补充做好预留{% block content %}{% endblock %}
<body class="{{page_type}} is-preload"><div id="page-wrapper"><!-- Header --><div id="header">{% block header %}<div class="inner"><h1><a href="{{ url_for('home') }}" id="logo">Flask</a></h1></div>{% endblock %}<!-- Nav --><nav id="nav"><ul><li><a href="{{ url_for('home') }}">Home</a></li></ul></nav></div></div>{% block content %}{% endblock %}
</body>

这里预留了个 page_type 参数, 为了方便修改后续页面模板(主页与子页不同)。

  1. 合成layout.html
<!DOCTYPE html>
<html lang="en">
<head><title>{{ title }} - Flask</title><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /><meta name="description" content=""><meta name="author" content="Xiuchuan Zhang"><!-- CSS FILES --><link rel="stylesheet" type="text/css" href="/static/css/main.css" />{% block head %}{% endblock %}<!-- end -->
</head><body class="{{page_type}} is-preload"><div id="page-wrapper"><!-- Header --><div id="header">{% block header %}<div class="inner"><h1><a href="{{ url_for('home') }}" id="logo">Flask</a></h1></div>{% endblock %}<!-- Nav --><nav id="nav"><ul><li><a href="{{ url_for('home') }}">Home</a></li></ul></nav></div></div>{% block content %}{% endblock %}<!-- Footer --><div id="footer"><div class="container">{% block footer %}{% endblock %}<hr /><div class="row"><div class="col-12"><!-- Copyright --><div class="copyright"><ul class="menu"><li>&copy; 2023 - <a href="http://www.varalpha.com">VarAlpha Co.</a>All rights reserved.</li><li>Design: <a href="http://html5up.net">HTML5 UP</a></li></ul></div></div></div></div></div><!-- Footer End --><!-- JAVASCRIPT FILES --><script src="/static/js/jquery.min.js"></script><script src="/static/js/jquery.dropotron.min.js"></script><script src="/static/js/jquery.scrolly.min.js"></script><script src="/static/js/jquery.scrollex.min.js"></script><script src="/static/js/browser.min.js"></script><script src="/static/js/breakpoints.min.js"></script><script src="/static/js/util.js"></script><script src="/static/js/main.js"></script><!-- END JAVASCRIPT FILES -->{% block scripts %}{% endblock %}
</body></html>
  1. 使用layout.html编写index.html
{% extends "layout1.html" %}{% block header %}
<!-- Inner -->
<div class="inner"><header><h1><a href="{{ url_for('home') }}" id="logo">Flask</a></h1><hr /><p>A Quantitative Stock Analysis Platform</p></header><footer><a href="#banner" class="button circled scrolly">Start</a></footer>
</div>
{% endblock %}{% block content %}
<!-- Banner -->
<section id="banner"><header><h2>Hi. You're looking at <strong>Flask</strong>.</h2><p>A Quantitative Stock Analysis Platform</p></header>
</section>
{% endblock %}

改写Flask 相关函数

创建文件

touch __init__.py
touch views.py
  1. 把之前博客的runserver.py的app改写入flask生成文件views.py
"""
Routes and views for the flask application.
"""
from flask import Flask
from flask import render_templateapp = Flask(__name__)@app.route("/")
@app.route("/home")
def home():"""Renders the home page."""return render_template("index.html", title="Home Page", page_type="homepage")
  1. __init__.py 导入app参数
from .views import app
  1. 修改上篇博文中的启动文件runserver.py
cd ..
vim runserver.py

导入app参数

from gevent import pywsgi
from VarFlask import appserver = pywsgi.WSGIServer(("0.0.0.0", 5000), app)
server.serve_forever()
  1. 完成修改,重启flask docker 即可查看新的网页:

命令行输入:

sudo docker restart flask

模板网页预览

Flask_web1
Flask_web2

遇到的坑

出现白色框

上传至服务器后,所有显示的页面每次都有一段白色的框。
网络调试后,查看TCP传输字段,发现有未能解析的字段,发现是传输格式错误导致的。
由于电脑之前配置的文件格式为UTF8带签名,这是文件格式所带的签名导致的问题。
因此需要把上传的文件格式改为UTF8不带签名,就可以解决此问题。
可使用以下命令把签名去除:

find . -type f -name "*" -print | xargs -i sed -i 's/\xE    F\xBB\xBF//' {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/177360.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pytorch复现_IOU

定义了一个compute_iou函数&#xff0c;用于计算两个矩形框&#xff08;boxA和boxB&#xff09;之间的交并比&#xff08;IOU&#xff0c;Intersection over Union&#xff09;。IOU是一种常用的度量&#xff0c;用于评估两个矩形框的重叠程度。 在代码中&#xff0c;函数的输入…

centos关闭Java进程的脚本

centos关闭Java进程的脚本&#xff0c;有时候服务就是个jar包&#xff0c;关闭程序又要找到进程ID&#xff0c;在kill掉&#xff0c;麻烦&#xff0c;这里就写了个脚本 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.脚本如下 #!/bin/bash ps -ef | grep java | gre…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(3)

参考视频&#xff1a;https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频7&#xff1a;CNN 的全局架构 卷积层除了做卷积操作外&#xff0c;还要加上 bias &#xff0c;再经过非线性的函数&#xff0c;这么做的原因是 “scaled p…

《 博弈论教程(罗云峰版) 》——习题二答案

前言 博弈论这门课程&#xff0c;我们主要参考的教材是《博弈论教程&#xff08;罗云峰版&#xff09;》&#xff0c;但是罗老师的课后习题并没有给出完整的答案&#xff0c;秉着学习的态度&#xff0c;本人结合教材和 PPT 在这里给出课后习题的答案。 由于我们只学了完全信息…

sw 怎么装新版本

我们在安装solidworks时&#xff0c;有时候会提示A newer version of this applic ation is already installed. Installation stopped.如下图所示 这时候需要点继续安装 然后会出现下图所示情况&#xff0c;vba7.1安装未成功 这是因为我们电脑中以前安装过更高版本的solidw…

安装opensips

1. 安装opensips ubuntu下安装&#xff1a; 1&#xff09;执行以下的脚本 openSIPS | APT Repository 2&#xff09;apt-get install opensips 安装完毕后&#xff0c;再选择需要的module继续安装&#xff0c;不需要编译 如果只是用作load balancer&#xff0c;那么只需要…

arcpy.message实现探索

arcpy 位置D:\Program Files\GeoScene\Pro\Resources\ArcPy\arcpy\__init__.py ”““AddMessage(消息) 创建可以使用任何GetMessages函数访问的地理处理信息消息(Severity0)。 message(字符串):要添加的消息。”“ arcpy.geoprocessing D:\Program Files\GeoScene\Pro\Re…

5.4 完整性约束命名子句

思维导图: 笔记&#xff1a;5.4 完整性约束命名子句 定义: 完整性约束是在CREATE TABLE语句中定义的。SQL为CREATE TABLE语句提供了CONSTRAINT子句&#xff0c;用于对完整性约束进行命名。命名的目的是方便增加或删除约束。 基本结构: CONSTRAINT <完整性约束名称> &l…

python实现MC协议(SLMP 3E帧)的TCP服务端(篇一)

python实现MC协议&#xff08;SLMP 3E帧&#xff09;的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样&#xff0c;可以使用现成的pymodbus模块去实现。但是&#xff0c;我们可以根据协议帧进行组包&#xff0c;自己去实现帧的格式&#xff0c;而这一切可以基于socket模…

jdk官网下载(详细步骤)

jdk全部版本下载网址 Java Archive | Oraclehttps://www.oracle.com/java/technologies/downloads/archive/ 下载之前先建立oracle账号(免费创建)&#xff0c;不用特意去搜&#xff0c;你点击下载jdk的时候会自动弹出来&#xff0c;自己建立一个账号就能下载了 找到自己要下载…

C++数据结构算法篇Ⅰ

C数据结构算法篇Ⅰ &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C算法 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 主要内容讲解数据结构中的链表结构 文章目录 C数据…

PHP服务器端电商API原理及示例讲解(电商接口开发/接入)

下面小编就为大家分享一篇PHP服务器端API原理及示例讲解(接口开发)&#xff0c;具有很好的参考价值&#xff0c;希望对大家有所帮助 相信大家都做过PHP请求电商API接口获取数据&#xff0c;比如淘宝平台商品API接口&#xff0c;订单接口&#xff0c;京东接口&#xff0c;1688接…

Python画图之皮卡丘

Python-turtle画出皮卡丘&#xff08;有趣小游戏&#xff09; 一、效果图二、Python代码 一、效果图 二、Python代码 import turtledef getPosition(x, y):turtle.setx(x)turtle.sety(y)print(x, y)class Pikachu:def __init__(self):self.t turtle.Turtle()t self.tt.pensi…

Android广播BroadcastReceiver

BroadcastReceiver组件 BroadcastReceiver是Android中的一个组件&#xff0c;用于接收和处理系统广播或应用内广播。它可以监听系统事件或应用内自定义的广播&#xff0c;并在接收到广播时执行相应的操作。 广播是一种用于在应用组件之间传递消息的机制。通过发送广播&#x…

如何使用查看器筛选、搜索功能进行数据定位?

前言 我们曾探讨过观测云如何通过将内置视图与查看器相联结&#xff0c;实现更全面的数据关联分析。&#xff08;参见《内置视图联动查看器&#xff0c;实现数据关联分析》&#xff09;这里提到的查看器&#xff0c;实际是一个功能全面且强大的数据查看分析工具。其提供多种搜…

土壤数据库辅助工具SPAW计算土壤导水率

土壤数据库辅助工具SPAW 首先下载SPAW工具 点击打开 根据之前的1比100土壤数据查表得到各个组分含量 其中 Field Capacity是田间持水量 Matric Bulk Density是基质粒密度 参考文章 【SWAT水文模型】ArcSWAT土壤数据库辅助工具SPAW简述

Security ❀ DNS协议常见DOS攻击详解

文章目录 1. DNS协议基础概述2. DNS报文详解2.1. DNS Request 请求包2.2. DNS Reply 响应包 3. DNS Request Flood3.1. 攻击原理3.2. 防护方法3.2.1. TC源认证3.2.2. 被动防御3.2.3. CNAME防护模式3.2.4. *CANME类型解析过程** 4. DNS Reply Flood4.1. 攻击原理4.2. 防护方法 5…

2023年【R1快开门式压力容器操作】最新解析及R1快开门式压力容器操作复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 R1快开门式压力容器操作最新解析是安全生产模拟考试一点通生成的&#xff0c;R1快开门式压力容器操作证模拟考试题库是根据R1快开门式压力容器操作最新版教材汇编出R1快开门式压力容器操作仿真模拟考试。2023年【R1快…

Express框架开发接口之书城商店原型图

这是利用Axure画的&#xff0c;简单画一下原型图&#xff0c;根据他们的业务逻辑我们完成书城商店API开发 首页 分类 购物车 个人中心

批量采集各类自媒体平台内容为word文档带图片软件【支持18家自媒体平台的爬取采集】

批量采集各类自媒体平台内容为word文档带图片软件介绍&#xff1a; 1、支持头条号、大鱼号、企鹅号、一点号、凤凰号、搜狐号、网易号、趣头条、东方号、时间号、惠头条、WiFi万能钥匙、新浪看点、简书、QQ看点、快传号、百家号、微信公众号的文章批量采集为docx文档并带图片。…