35 - 个人博客项目-06-首页

1. 自定义html中的过滤器:apps / user / views.py

# 自定义过滤器,将二进制内容转成utf-8格式
@user_bp.app_template_filter("cdecode")
def content_decode(content):content = content.decode("utf-8")return content[:200]@user_bp.app_template_filter("cdecode1")
def content_decode1(content):content = content.decode("utf-8")return content

2. 编写首页模板templates / user / index.html

        (1).  继承父级模板
{% extends'base.html' %}
{% block title %}博客首页
{% endblock %}
        (2). 首页样式
{% block styles %}{{ super() }}<style>#container {width: 1200px;margin: 0 auto;}.article {width: 90%;margin: 20px auto;padding: 5px 10px;background-color: rgba(131, 202, 227, 0.7);border-bottom: 1px solid gray;}.article p {font-size: 14px;rgba(75, 75, 74, 1.00);}.article h4 a {color: rgba(80, 80, 79, 1.00);}.article h4 a:hover {color: black;}.article div span {margin-left: 20px;}.article div {margin-bottom: 18px;}</style>
{% endblock %}
        (3). 文章展示
{% block newcontent %}{% if pagination.items %}<div id="container">{% for article in pagination.items %}<div class="article"><h4><a href="#">{{ article.title }}</a></h4><p><span>作者: {{ article.user.username }}</span><br><br>{# cdecode:自定义过滤器,将二进制转换成utf8; safe:转义,浏览器识别标签 #}<div>{{ article.content | cdecode | safe }}</div></p><div><span style="margin-left:0">发布时间: {{ article.pdatetime }}</span><span>收藏:{{ article.save_num }}</span><span>点击量:{{ article.click_num }}</span><span>点赞量:{{ article.love_num }}</span></div></div>{% endfor %}{# 底部分页 #}...............</div>{% endif %}{% endblock %}
        (4). 底部分页
 {# 底部分页 #}<nav aria-label="Page navigation" class="col-md-offset-5"><ul class="pagination">{# pagination.has_prev: 判断是否存在上一页,如果存在可以点击,否则不可以点击#}<li><a {% if not pagination.has_prev %}style="pointer-events:none;background-color:#ddd;" {% endif %}href="{{ url_for('user.index') }}?page={{ pagination.prev_num }}"aria-label="Previous"><spanaria-hidden="true">&laquo;</span></a></li>{% for page_num in range(1,pagination.pages + 1) %}<li><a  {% if pagination.page== page_num %}style="pointer-events:none;background-color:#ddd;" {% endif %}href="{{ url_for('user.index') }}?page={{ page_num }}">{{ page_num }}</a></li>{% endfor %}{# pagination.has_next: 判断是否存在下一页,如果存在可以点击,否则不可以点击#}<li><a {% if not pagination.has_next %}style="pointer-events:none;background-color:#ddd;" {% endif %}href="{{ url_for('user.index') }}?page={{ pagination.next_num }}" aria-label="Next"><spanaria-hidden="true">&raquo;</span></a></li></ul></nav>

3. 编写首页函数apps / user / views.py

# 首页
@user_bp.route("/")
def index():# 获取session方式,session底层默认会获取uid = session.get('uid')  # 登录时传过来的session# 获取文章列表# 获取页码(分页使用)page = int(request.args.get("page", 1))# paginate(当前页, 每页显示几条):分页;返回一个对象pagination = Article.query.order_by(-Article.pdatetime).paginate(page=page, per_page=3)# 获取分类列表types = Article_type.query.all()# 判断用户是否登录if uid:  # 判断是否有sessionuser = User.query.get(uid)return render_template("user/index.html", user=user, types=types, pagination=pagination)  # 返回用户信息else:return render_template('user/index.html', types=types, pagination=pagination)

4. 将登录和注册函数,成功后重定向到首页注释去掉

5. 配置 base.html 公共组件跳转首页路径

<!--配置首页路径--><li class="active"><a href="{{ url_for('user.index') }}">首页 <span class="sr-only">(current)</span></a></li>.................
<!--判断是否登录用户,登录用户: 用户名/用户中心/退出 ; 未登录: 登录 /注册-->
{% if user %}<li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button"aria-haspopup="true" aria-expanded="false">欢迎! {{ user.username }} <spanclass="caret"></span></a><ul class="dropdown-menu"><li><a href="#">用户中心</a></li><li role="separator" class="divider"></li><li><a href="#">退出</a></li></ul></li>
{% else %}<li><a href="{{ url_for('user.login') }}">登录</a></li><li><a href="{{ url_for('user.register') }}">注册</a></li>
{% endif %}

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

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

相关文章

Redis 10 大数据类型

1. which 10 1. redis字符串 2. redis 列表 3. redis哈希表 4. redis集合 5. redis有序集合 6. redis地理空间 7. redis基数统计 8. redis位图 9. redis位域 10. redis流 2. 获取redis常见操作指令 官网英文&#xff1a;https://redis.io/commands 官网中文&#xff1a;https:/…

git difftool对比差异,避免推送不相关内容

问题 在利用git进行版本管理的时候&#xff0c;经常会由于对其他不相关的代码&#xff0c;做了一些小改动&#xff0c;例如删除了一个空行&#xff0c;多了一个缩进等。 为避免将这些不相关的改动也提交到远程&#xff0c;对PR造成不必要的影响&#xff0c;可以利用git diff命…

DolphinDB 携手白鲸开源 WhaleStudio 打造高效敏捷的 DataOps 解决方案

浙江智臾科技有限公司&#xff08;简称&#xff1a;DolphinDB&#xff09;和北京白鲸开源科技有限公司&#xff08;简称&#xff1a;白鲸开源&#xff09;是在大数据技术领域活跃的两支专业团队。 DolphinDB 专注于为用户提供集高性能存储、复杂分析能力和流处理于一体的实时计…

【区块链 | IPFS】浅谈 | IPFS数据存储原理

IPFS在数据存储方面采用的是分散式的文件存储,区别于HTTP协议的位置寻址,IPFS是基于内容寻址,当文件上传到IPFS节点存储时,节点会对文件进行Merkle DAG(默克尔有向无环图)的格式组织分块存储,在存储完毕后,文件将以Merkle DAG的根哈希数来表示该文件,用户可以从IPFS构…

在腾讯云服务器OpenCLoudOS系统中安装svn(有图详解)

1. 安装svn yum -y install subversion 安装成功&#xff1a; 2. 创建数据根目录及仓库 mkdir -p /usr/local/svn/svnrepository 创建test仓库&#xff1a; svnadmin create /usr/local/svn/test test仓库创建成功&#xff1a; 3. 修改配置test仓库 cd /usr/local/svn/te…

ssm+vue校园活动管理平台源码和论文

ssmvue校园活动管理平台源码和论文090 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 使用旧方法对校园活动信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园活动信…

【Python自学笔记】Python好用的模块收集(持续更新...)

文章目录 日志模块钉钉机器人命令助手持续更新中,如果您有其他实用好用的模块欢迎留言...日志模块 写代码离不开日志,自定义一个理想的日志对于小白来说可能是一件很反锁的事情,就像我刚学习Python的时候自己写的一个自定义日志,为了解决这个痛点,今天就和大家分享一个可以…

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

深入理解AMBA总线协议(AXI总结篇)

AXI总线已经是AMBA总线中最常见&#xff0c;使用最频繁的总线&#xff0c;并且没有之一。 可以说AXI总线已经成为了片上总线中最重要的协议&#xff0c;本篇文章打算花一些篇幅&#xff0c;帮大家总结一下AXI总线的学习重点、学习难点&#xff0c;以帮助大家更好更快的掌握AXI…

WevSocket(java基于注解实现)

一、概述 本文基于spring-boot-starter-websocket简单的完成收发信息功能&#xff0c;使用注解形式进行实现。 二、相关配置 spring:2.0.2&#xff0c;jdk:1.8.202&#xff0c;maven:3.3.9 因为spring和maven有版本匹配的要求&#xff0c;请大家注意自己的版本是否匹配 三…

IDEA使用Docker插件

修改Docker配置 1.执行命令vim /usr/lib/systemd/system/docker.service&#xff0c;在ExecStart配置的后面追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:…

如何将电子画册生成二维码,扫码查看产品图册?

随着移动互联网的发展&#xff0c;二维码已经成为了人们生活中不可或缺的一部分。无论是支付宝、微信支付的扫码支付&#xff0c;还是商家的促销活动、产品包装上的二维码&#xff0c;都展示了二维码的广泛应用。 电子画册也果不其然&#xff0c;它也可以生成二维码&#xff0c…

数据通信——传输层TCP(可靠传输原理的ARQ)

引言 上一篇讲述了停止等待协议的工作流程&#xff0c;在最后提到了ARQ自动请求重传机制。接下来&#xff0c;我们就接着上一篇的篇幅&#xff0c;讲一下ARQ这个机制 还是这个图来镇楼 ARQ是什么&#xff1f; 发送端对出错的数据帧进行重传是自动进行的&#xff0c;因而这种…

leetcode316. 去除重复字母(单调栈 - java)

去除重复字母 题目描述单调栈代码演示进阶优化 上期经典 题目描述 难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s &#xff0c;请你去除字符串中重复的字母&#xff0c;使得每个字母只出现一次。需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对…

完美解决xinput1_3.dll丢失问题,修复xinput1_3.dll文件

在电脑游戏中经常遇到xinput1_3.dll丢失的问题&#xff0c;这个问题是因为系统缺少该文件而引起的。而且&#xff0c;这个问题很容易导致游戏无法正常运行&#xff0c;给玩家带来很大的烦恼。在本文中&#xff0c;我们将详细介绍如何修复这个问题&#xff0c;给大家详细的说明多…

前端js后端nginx+php+workerman实现websocket通信

workerman是纯PHP开发的开源PHP 应用容器&#xff0c;可以通过composer安装&#xff0c;目前因为要用到客户端与服务器实时通信&#xff0c;故使用了workerman中的websocket模块功能 服务器端&#xff1a; 1.建一个目录&#xff0c;创建start.php文件&#xff0c;文件名随意 …

人人必学的微信群变现打造课,让你的私域营销快人一步

标题&#xff1a;私域营销进阶之微信群变现课&#xff0c;助你快速实现营销目标 引言&#xff1a; 随着互联网的发展&#xff0c;私域营销成为了许多企业和个人推广和销售的重要方式。在私域营销中&#xff0c;微信群作为一个具有密集社交关系和高度互动性的平台&#xff0c;成…

【Golang】go条件编译

交叉编译只是为了能在一个平台上编译出其他平台可运行的程序&#xff0c;Go 作为一个跨平台的语言&#xff0c;它提供的类库势必也是跨平台的&#xff0c;比如说程序的系统调用相关的功能&#xff0c;能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译…

ERROR: Failed building wheel for PyECLib

ERROR: Failed building wheel for PyECLib 具体原因 error: liberasurecode.so.1: cannot open shared object file: No such file or directory 解决方案 安装 liberasurecodehttps://opendev.org/openstack/liberasurecode Install dependencies Debian/Ubuntu hosts: …

uniapp的 picker 日期时间选择器

效果图&#xff1a; dateTimePicker.js function withData(param){return param < 10 ? 0 param : param; } function getLoopArray(start,end){var start start || 0;var end end || 1;var array [];for (var i start; i < end; i) {array.push(withData(i))…