使用Flask制作美观的网页日历

从零打造DIY智能显示屏:树莓派+网页技术构建个性化信息中枢 智能显示屏作为信息可视化与交互的重要载体,其核心原理是通过软硬件结合,将分散的数据源聚合并直观呈现。从技术实现角度看,它通常由主控板(如树莓派、ESP32)驱动屏幕,并依赖稳定的软件架构来确保长期运行。这种方案的技术价值在于其高度的定制性与可控性,能够突破商用产品在功能与成本上的限制。在应用场景上,它非常适合作为桌面信息看板、家庭控制中心或环境状态显示器,满足用户对实时数据(如系统状态、日程天气)的集中监控需求。本文以树莓派和网页技术栈为例,详细阐述了如何通过硬件选型、软件架构设计(特别是利用Flask后端 阅读详情
Calender

python的日历模块Calender提供了多种日历展示模式:

参数说明示例
setfirstweekday(firstweekday)0是星期一,…,6为星期日calendar.setfirstweekday(firstweekday=6)
monthcalendar(year, month)返回一个月中天数列表(不是当前月份的天数为0)calendar.monthcalendar(2019, 6)
prmonth(theyear, themonth, w=0, l=0)w每个单元格宽度,l每列换l行calendar.prmonth(2019, 6)
calendar.month_abbr[month]打印月份对应的英文简写calendar.month_abbr[6]
………

基本的就是上面这些了…

Bootstrap 表格

Flask使用Bootstrap模板,这个前几期已经说了,还不清楚的朋友,可以看看往期内容。
今天主要说下Bootstrap的table

类说明
.table少量的内补(padding)和水平方向的分隔线
.table-striped给 <tbody> 之内的每一行增加斑马条纹样式
.table-bordered为表格和其中的每个单元格增加边框
.table-hover可以让 <tbody> 中的每一行对鼠标悬停状态作出响应
.table-condensed可以让表格更加紧凑,单元格中的内补(padding)均会减半
.active鼠标悬停在行或单元格上时所设置的颜色
.success标识成功或积极的动作
.info标识普通的提示信息或动作
.warning标识警告或需要用户注意
.danger标识危险或潜在的带来负面影响的动作
Flask日历

今天通过Flask,制作一个网页版日历,系统启动后,计算当天日期,并生成日历,高亮表示本月和今日。
首先,需要考虑日历的响应式布局,每行放四个月的数据,所以需要使用Bootstrap的栅格化<div class="col-lg-3">,保证在没有足够宽的情况下,自动转为单月的数据展示,避免重叠
其次,针对数据的排列,日历模块中calendar.monthcalendar(year, month)会返回一个原组,但如同下面的情况:

>>> import calendar
>>> calendar.setfirstweekday(firstweekday=6)
>>> calendar.monthcalendar(2019,5)
>>> [[0, 0, 0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17, 18],
	[19, 20, 21, 22, 23, 24, 25], [26, 27, 28, 29, 30, 31, 0]]
>>> calendar.monthcalendar(2019,6)
	[[0, 0, 0, 0, 0, 0, 1], [2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15],
	[16, 17, 18, 19, 20, 21, 22], [23, 24, 25, 26, 27, 28, 29], [30, 0, 0, 0, 0, 0, 0]]

有的月份刚好卡在1号周六,所以列表长为6…这样会导致绘图的时候日历表格高度差异,所以如果不满6个的月份,我们手动给他创建创建一个数据全为0的空列表:

def calc_calender(date):
    year = date.year
    yearInfo = dict()
    for month in range(1, 13):
        days = calendar.monthcalendar(year, month)
        if len(days) != 6:
            days.append([0 for _ in range(7)])
        month_addr = calendar.month_abbr[month]
        yearInfo[month_addr] = days
    return yearInfo

针对返回的数据,使用Jinjia2模板进行循环获取,要注意一点是,如果是日期是0的,代表站位符,需要进行替换。
但如果整行都是零,会导致Bootstrap的表单样式变更,故使用&nbsp进行占位操作。
最终HTML代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Flask Calendar</title>
    <link rel="icon" href="{{ url_for('static',filename='favicon.ico') }}">
    <link href="{{ url_for('static',filename='bootstrap.min.css') }}" rel="stylesheet">
</head>

<body>
<div class="container">
    <h3 class="text-center">Welcome to Flask Calendar {{date.year}} <small><a href="https://www.jianshu.com/u/d23fd5012bed"> 清风Python</a></small></h3>

    {% set week_addr = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'] %}
    {% for month_addr,monthInfo in content.items()%}

    <div class="col-lg-3">
        <h4 class="text-center">{{month_addr}}</h4>
        {% with _month=false %}
        {% if month_addr == this_month %}
            <table style='background-color:#a6e1ec' class="table table-bordered">
            {% set _month = true %}
        {% else %}
            <table class="table table-bordered">
        {% endif %}
                <tr>
                    {% for addr in week_addr %}
                        <th>{{addr}}</th>
                    {% endfor %}
                </tr>
                {% for weeks in monthInfo %}
                <tr>
                    {% for day in weeks %}
                    {% if day == 0 %}
                    <td>&nbsp</td>
                    {% elif _month== true and day == date.day %}
                    <td style="background-color:hotpink;">{{ day }}</td>
                    {% else %}
                    <td>{{ day }}</td>
                    {% endif %}
                    {% endfor %}
                </tr>
                {% endfor %}
                {% endwith %}
            </table>
    </div>
    {% endfor %}

</div>

</body>
<footer class="text-center "><strong><a href="https://www.jianshu.com/u/d23fd5012bed">Flask Calendar By:清风Python</a></strong></footer>
</html>

JInjia2模板中,通过对with 和set的局部变量定义,判断月份与日期,最终达到高亮当月和当天的效果:
当天高亮效果.png
完整代码:

# -*- coding: utf-8 -*-
# @Author   : 王翔
# @JianShu  : 清风Python
# @Date     : 2019/6/4 06:01
# @Software : PyCharm
# @version  :Python 3.6.8
# @File     : index.py

from flask import Flask, render_template, request, session, redirect, url_for
import calendar
from datetime import datetime

calendar.setfirstweekday(firstweekday=6)
app = Flask(__name__)

week = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']


def calc_calender(date):
    year = date.year
    yearInfo = dict()
    for month in range(1, 13):
        days = calendar.monthcalendar(year, month)
        if len(days) != 6:
            days.append([0 for _ in range(7)])
        month_addr = calendar.month_abbr[month]
        yearInfo[month_addr] = days
    return yearInfo


@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == "GET":
        date = datetime.today()
        this_month = calendar.month_abbr[date.month]
        return render_template('index.html', this_month=this_month, date=date, content=calc_calender(date))


if __name__ == '__main__':
    app.run(debug=True)

最终完成模板渲染后,显示年度日历:
Flask Calendar.gif

完整代码上传在GitHub:https://github.com/KingUranus/FlaskTests

好了,今天的内容就到这里,如果觉得有帮助,记得点赞支持。欢迎大家关注我的公众号,获取更多Python相关的知识,并有整理好的各类福利数据供大家下载:
清风Python.jpg

©本文由作者:清风Python 原创 如需转载请注明

基于树莓派与Chromium Kiosk模式打造DIY智能信息显示屏 智能信息终端是物联网和智能家居领域的关键组件,它通过整合硬件与软件,将动态数据可视化呈现。其核心原理在于利用低成本单板计算机(如树莓派)作为计算核心,驱动显示屏,并通过软件架构实现信息的聚合与展示。在技术实现上,采用Chromium浏览器的Kiosk(信息亭)模式作为显示框架,结合轻量级后端服务(如Python Flask),能够高效、灵活地构建定制化信息面板。这种方案的价值在于打破了商业产品的生态捆绑,赋予了开发者对数据源、界面样式和交互逻辑的完全控制权。它非常适用于家庭自动化、个人仪表盘、数字标牌等场景 阅读详情

相关推荐

树莓派智能相框DIY:低成本打造个性化数字记忆墙

嵌入式开发与物联网技术为硬件赋予了智能化的灵魂,其核心原理在于通过微控制器或单板计算机连接传感器与执行器,实现数据采集、处理与交互。这一技术价值在于能够将闲置或低成本硬件转化为功能强大的定制化设备,极大地降低了智能硬件的入门门槛。在智能家居、环境监测等应用场景中,嵌入式系统因其低功耗、高可靠性和可深度定制的特点而备受青睐。本文聚焦于利用树莓派这一经典开源硬件平台,结合Python编程与PyGame图形库,从零开始构建一个具备自动轮播、网络同步与信息叠加功能的智能电子相框。项目实践涵盖了从硬件选型、系统精简配

weixin_33694620的博客 450

Flask框架(一)--搭建,请求,静态文件,模板(日历制作)

Flask 轻量级框架:flask,web.py,tornado,开发灵活,开发效率低,可以真正体现程序员的水平。 重量级框架:django,方便程序员开发,提供大量的功能组件(站点管理,csrf_token,富文本,表单类,缓存,日志,ORM) flask提供了什么? 只能够完成最简单的请求响应 jinja2:模板系统 werkzeug:工具箱(wsgi) 插件 一、开始Flask f...

一个非常正经的人的博客 537

基于树莓派的智能镜子:物联网环境监测系统全栈开发实践

物联网(IoT)技术通过传感器、微控制器和网络连接,将物理世界与数字世界融合,实现环境数据的实时采集与智能控制。其核心原理在于利用嵌入式系统采集传感器数据,通过网络协议传输至服务器或本地处理单元,最终通过软件界面进行可视化呈现与交互。这项技术的价值在于为智能家居、工业监控、环境感知等场景提供了低成本、可定制的解决方案。在智能家居领域,环境监测是基础应用之一,通过温湿度、人体感应等传感器,可以构建能感知环境的智能设备。本文以树莓派(Raspberry Pi)为核心,结合DS18S20、DHT11等传感器,详细

weixin_33728708的博客 543

【Flask】使用Flask-Admin内建的JS控件获取日期和时间

在使用Flask-Admin开发后台Web应用时,有时候需要一个填写日期或时间的表单,最好的用户体验就是用JS控件选择日期或时间。由于博主本身不是专门做前端的,所以能用Flask-Admin的东西我都尽量使用。

代码就是生产力!https://yannanxiu.cn/ 5188

python使用Flask框架创建一个简单的动态日历

使用Flask框架创建一个简单的动态日历,运行代码,然后在浏览器中访问,将看到一个动态日历,能够通过点击按钮切换月份。

KEEP CODING 1278

flask-calendar:Python和Flask简单的Web日历

烧瓶日历 介绍 2017年12月,我决定我想尽可能退出Google服务。 日历是与我联系最紧密的服务之一。 没有太多选择,甚至更少的基于Web的。 我决定尝试使用带有到期日期和一些标签的Trello板一段时间,但事实证明维护起来比较困难。 加上缺少一个月的日历视图,并且不支持重复性/重复性任务,我决定充分利用假期来花费一些时间并构建一个简单的GCalendar克隆。 细节 主日历视图: 创建新的任务视图: 支持在一天中的桌面(如Google日历)上进行基本的拖放操作,现有任务的版本,创建重复性任务(每天,每月,按工作日,按月或特定日期编号),自定义颜色以及一些选项例如隐藏过去的任务或能够手

面试官问我Python日历模块,我直接用Flask开发Web版日历应用给他

嚣张的面试开场 面试官:小伙子,python与时间有关的基础模块有哪些? 我: time datetime calendar 面试官:简单介绍下calendar日历模块 我: 我拒绝! 面试官:小子你很拽啊,那你想如何? 我:我想给大佬你做一个美观的网页版日历啊。 面试官:走两步,我瞧瞧... 我:好嘞! Python Calender模块 python的日历模块...

清风Python 1031

flask-holcalendar:一个使用Flask编写的简单的Holiday Calendar Web应用程序

烧瓶-日历 使用编写的一个简单的Holiday Calendar Web应用程序。 该应用程序使用作为后端来获取有关办公室假期日历的信息。 用作构建应用程序的Web框架。 , 和用于前端开发。 演示版 建于 入门 这些说明将为您提供在本地计算机上运行并运行的项目的副本,以进行开发和测试。 先决条件 从创建Google Sheets API密钥。 下载notes.json文件并将其放在一边。 安装 克隆仓库: git clone https://github.com/rat9615/flask-holcalendar.git 更改目录: cd flask-holcalendar 。 在

flair_使用Event Flair装饰您的Google日历

flairIf you’re a user Google Calendar you might want some options for customizing it. If you’re tired of the default interface, today we look at Event Flairs from Google Labs that allows you to custom...

culingluan4376的博客 269

【Unity报错】Unity导入海康SDK 报错 DllNotFoundException: PlayCtrl assembly

2.尝试按网上其他的办法(包括使用depengs查看dll依赖等)1.先检查Plugins文件夹中是否存在PlayCtrl文件。3.如果网上查阅的办法都不能解决,请继续往下看。更换低版本的SDK库文件。

weixin_42968584的博客 1127

Spring Boot 构建war 部署到tomcat下无法在Nacos中注册服务

因此,当使用外部容器时,如此处的 Tomcat 来部署项目,AbstractAutoServiceRegistration 就不能监听到容器启动事件了,也就不会尝试向服务注册中心注册当前这个微服务,那么注册就失败了,并且也就没有异常信息了。自定义获取获取外部容器端口的方法, 然后监听应用启动事件,当应用被启动时,获取外部容器启动的端口号,然后将这个 port 设置到 NacosAutoServiceReigistration 中。在启动类同级目录,复制下面代码即可(不需要修改,直接构建war即可)

ttyy1112的专栏 2519

爬虫新宠requests_html 带你甄别2019虚假大学

知识有价 公众号从5月31号开始第一次发文,到现在快一个月了。27天的时间里,更新了26篇文章。因为感觉每天更新身体有些扛不住,所以从上周开始,每周五给自己放个假,找朋友撸撸串,和同学怀念下10年前的dota1。 今天很开心,公司内部博客网站中,一个项目举办了相关的活动,具体活动的细节我也是今天才知道。大概评奖规则以作者文章获取赞赏或者推荐次数进行排名。之前写的flask制作美观的...

清风Python 417

OpenCode:终端开源AI编程助手,多模型接入与实战指南

AI编程助手正在从IDE侧边栏走向终端环境。其核心原理是让模型直接读取项目文件、执行命令、查看报错,形成从诊断到修复的完整闭环,从而解决传统插件上下文割裂的问题。技术价值在于开源透明、模型无关,既可接入OpenAI等云端服务,也能通过Ollama连接本地模型,兼顾数据安全与离线场景。在工程实践中,它适用于长时间驻留项目、自动修Bug、团队统一AI工具链等需求。OpenCode正是这样一款终端AI助手,支持灵活配置第三方API密钥,提供免费档与Go套餐,并通过Skills技能系统让模型遵循标准操作流程。同时,

weixin_28745821的博客 327

python桌面应用html_是否将Python后端与HTML / CSS / JS用户界面集成到桌面应用程序? - javascript...

在创建桌面应用程序时,如何或将Python代码与HTML / CSS / JS集成为用户界面,该如何做?一个简单的例子;如果我想用Python创建一个打印“ Hello World!”的函数并使用HTML / CSS / JS创建用户界面(使其精美,也许添加一些图像),因此我可以将其用作桌面应用程序。我将如何处理?我知道我可以使用Tkinter之类的库,但是它不允许自定义用户界面的灵活性。我已经读...

weixin_39793420的博客 245

华为OD机试真题 2026-9-2【查找幸运数】

华为OD机试真题 新系统【查找幸运数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【查找幸运数】多语言题解。

qq_45776114的博客 500

基于STM32L4XX的环境光传感器(VCNL4040M3OE)应用程序设计

• 集成模块:红外发射器(IRED)、环境光传感器(ALS)、接近传感器(PS)及信号调理IC。#define VCNL4040_I2C_ADDR (0x60 << 1) // 7位地址左移一位。// 组合成16位值。// I2C总线句柄。// 设置参数:ALS集成时间160ms,中断禁止,ALS功能开启。// 设置参数:PS工作频率80Hz,开红外二极管,PS功能开启。// 初始化I2C外设。• 输出类型:I2C总线(ALS/PS)// 2. 配置环境光传感器 (ALS) 并启动。

myron6688的博客 143

程序猿老爸带娃编程的小小课堂——九九乘法表的编程实现

《程序猿老爸带娃学编程:用嵌套循环实现九九乘法表》是一篇趣味编程教学案例。文章通过类比做菜的步骤,生动讲解了如何用Python嵌套循环生成九九乘法表:外层循环控制行数,内层循环控制每行公式数。重点解析了循环结构、变量使用和格式化输出等核心概念,并特别提醒注意循环边界和代码缩进。最后以温馨寄语鼓励孩子保持学习热情,将编程比作骑自行车,强调坚持练习的重要性。全文用生活化比喻降低理解难度,适合亲子编程启蒙教学。

20多年IT老兵|制造业数据架构与AI落地|全流程亲手实践|源码同步开源 553

推荐系统[九]项目技术细节讲解z2:搜索Query理解[Term Weight、Query 改写、同义词扩写]和语义召回技术

在 pooling 方法上,我们也尝试过不同层 pooling,或者在多层上增加 attention 聚合 BERT 多层结果,效果和最后一层所有 token 做 average pooling 相当。损失函数方面,在排序阶段使用pairwise比 pointwise 损失函数的效果会更好。

丨汀、的博客 1109

python《计算机基础》flask课程网站建设系统django

前端功能的一部分,包括管理添加、编辑和删除等操作,是后台功能的主要组成部分。课程介绍、教学视频、教程、软件下载、介绍和公告以及成员资格管理,这些元素共同构成了上下文的基础。老师可以通过论坛的形式发布问题与学生进行学习的交流,学生也可以提出学习的困惑和对教学方法等的建议。管理员可以通过后台对课程介绍中的内容进行添加,修改,删除等。首页有一个导航栏,通过点击不同的功能图标转到相应功能的界面进行操作。这部分主要是方便学生通过教学日历更加了解教学的进度,学生可以自行下载一些实验相关资源,从而规划自己的学习进度。

鹏飞的博客 330

拉曼光谱入门:5.表面增强与共振增强

拉曼散射效应因其弱信号特性限制了传统拉曼光谱术的检测灵敏度。为克服这一局限,表面增强拉曼光谱术(SERS)和共振增强拉曼光谱术(RRS)被开发出来,显著提升了信号强度。SERS通过金属表面的电磁和化学效应放大信号,而RRS则通过匹配激发光波长与分子电子跃迁波长来增强信号。这两种技术扩大了拉曼光谱的应用范围,尤其在低浓度和微量试样分析中表现出色,尽管在实验操作和试样损伤方面存在挑战。

qq_53529450的博客 1446

69、SAP数据库归档重做日志备份策略与工具详解

本文详细解析了SAP数据库归档重做日志备份的重要性及策略,介绍了SAP提供的备份工具brarchive及其配置和使用方法,探讨了BRBACKUP与BRARCHIVE的联合运行、一致在线备份、备用数据库备份场景以及备份策略的综合应用与优化。此外,还分析了备份过程中常见问题的解决方法、备份监控与评估流程、与第三方备份解决方案的集成方式,以及未来备份技术的发展趋势和应对策略。通过合理运用这些策略和工具,可以有效保障SAP数据库的安全性和可恢复性。

peace的博客 135

一站式宠物店服务系统 宠物商城系统小程序的设计与实现

前端采用微信小程序原生开发或跨平台框架(如Taro、Uni-app),后端选择Node.js+Express或Java Spring Boot,数据库使用MySQL或MongoDB。明确系统核心功能模块:宠物商品商城(食品、用品、药品)、宠物服务预约(美容、医疗、寄养)、会员管理、订单管理、在线咨询、社区互动等。进行功能测试(单元测试、接口测试)、性能测试(负载测试)及安全测试(数据加密、防SQL注入)。构建会员体系(积分、等级)、订单跟踪(物流API集成)、消息推送(模板消息)。

专注分享bishe530的博客 573

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AIGC(生成式AI)试用 44 -- 个人知识库

AIGC(生成式AI)试用 43 -- 个人知识库

Rolei的博客 1355

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: Flask使用Bootstrap模板并引入Ajax后台完成数据刷新
下一篇: Bootstrap学习笔记4--按钮控件与css骚操作
清风 python
博客等级 码龄9年 64粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值