你的第一个博客-第二弹

devtools/2024/12/22 20:58:57/

按照第一弹中博客整体布局和功能要求,给出 templates 目录下相关的 HTML 模板代码。

1. base.html (基础模板)

base.html 是所有页面的基础模板,包含了公共的 HTML 结构(如头部、尾部、导航条等),其他页面会继承它。

<!-- templates/base.html -->
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>博客系统</title><link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body><header><nav><ul><li><a href="{{ url_for('index') }}">首页</a></li>{% if current_user.is_authenticated %}<li><a href="{{ url_for('new_post') }}">发布文章</a></li><li><a href="{{ url_for('logout') }}">注销</a></li>{% else %}<li><a href="{{ url_for('login') }}">登录</a></li><li><a href="{{ url_for('register') }}">注册</a></li>{% endif %}</ul></nav></header><main>{% block content %}{% endblock %}</main><footer><p>© 2024 我的博客系统</p></footer>
</body>
</html>

2. index.html (首页模板)

index.html 是显示博客文章列表的页面,继承了 base.html。它会从数据库中查询所有文章并显示在页面上。

<!-- templates/index.html -->
{% extends 'base.html' %}{% block content %}<h1>博客文章</h1>{% if posts %}<ul>{% for post in posts %}<li><h2><a href="{{ url_for('post', post_id=post.id) }}">{{ post.title }}</a></h2><p>{{ post.content[:200] }}...</p>  <!-- 截取内容的前200个字符 --><p><small>发布于: {{ post.date_posted }}</small></p></li>{% endfor %}</ul>{% else %}<p>目前还没有文章发布。</p>{% endif %}
{% endblock %}

3. post.html (单篇文章页面模板)

post.html 用来展示单篇文章的详细内容,用户点击文章标题后,会跳转到这个页面。

<!-- templates/post.html -->
{% extends 'base.html' %}{% block content %}<h1>{{ post.title }}</h1><p><small>发布于: {{ post.date_posted }} | 作者: {{ post.user.username }}</small></p><div>{{ post.content }}</div>{% if current_user == post.user %}<a href="{{ url_for('edit_post', post_id=post.id) }}">编辑文章</a><a href="{{ url_for('delete_post', post_id=post.id) }}">删除文章</a>{% endif %}<a href="{{ url_for('index') }}">返回首页</a>
{% endblock %}

4. login.html (登录页面模板)

login.html 用于用户登录。

<!-- templates/login.html -->
{% extends 'base.html' %}{% block content %}<h1>登录</h1><form method="POST">{{ form.hidden_tag() }}<div><label for="username">用户名</label>{{ form.username(class="form-control") }}</div><div><label for="password">密码</label>{{ form.password(class="form-control") }}</div><div><button type="submit" class="btn btn-primary">登录</button></div></form><p>还没有账号?<a href="{{ url_for('register') }}">注册</a></p>
{% endblock %}

5. register.html (注册页面模板)

register.html 用于用户注册。

<!-- templates/register.html -->
{% extends 'base.html' %}{% block content %}<h1>注册</h1><form method="POST">{{ form.hidden_tag() }}<div><label for="username">用户名</label>{{ form.username(class="form-control") }}</div><div><label for="email">电子邮件</label>{{ form.email(class="form-control") }}</div><div><label for="password">密码</label>{{ form.password(class="form-control") }}</div><div><label for="confirm_password">确认密码</label>{{ form.confirm_password(class="form-control") }}</div><div><button type="submit" class="btn btn-primary">注册</button></div></form><p>已有账号?<a href="{{ url_for('login') }}">登录</a></p>
{% endblock %}

6. create_post.html (创建文章页面模板)

create_post.html 用于发布新文章。

{% extends "layout.html" %}{% block content %}<h2>Create New Post</h2><form method="POST" action="{{ url_for('new_post') }}">{{ form.hidden_tag() }}<div>{{ form.title.label }}<br>{{ form.title(size=32) }}<br>{% for error in form.title.errors %}<span class="text-danger">{{ error }}</span><br>{% endfor %}</div><div>{{ form.content.label }}<br>{{ form.content(rows=10, cols=50) }}<br>{% for error in form.content.errors %}<span class="text-danger">{{ error }}</span><br>{% endfor %}</div><div><button type="submit">Create Post</button></div></form>
{% endblock %}

7. edit_post.html (编辑文章页面模板)

{% extends "layout.html" %}{% block content %}<h2>Edit Post</h2><form method="POST" action="{{ url_for('edit_post', post_id=post.id) }}">{{ form.hidden_tag() }}<div>{{ form.title.label }}<br>{{ form.title(size=32) }}<br>{% for error in form.title.errors %}<span class="text-danger">{{ error }}</span><br>{% endfor %}</div><div>{{ form.content.label }}<br>{{ form.content(rows=10, cols=50) }}<br>{% for error in form.content.errors %}<span class="text-danger">{{ error }}</span><br>{% endfor %}</div><div><button type="submit">Update Post</button></div></form>
{% endblock %}

8. layout.html (定义整个网站的基础结构和样式)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>{% block title %}My Blog{% endblock %}</title><!-- 引入全局样式 --><link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body><!-- 页面头部 --><header><h1>Welcome to My Blog</h1><nav><ul><li><a href="{{ url_for('index') }}">Home</a></li><li><a href="{{ url_for('new_post') }}">Create New Post</a></li><li><a href="{{ url_for('login') }}">Login</a></li><li><a href="{{ url_for('logout') }}">Logout</a></li></ul></nav></header><!-- 页面主要内容 --><main>{% block content %}<!-- 子页面的内容将在这里显示 -->{% endblock %}</main><!-- 页面页脚 --><footer><p>&copy; 2024 My Blog. All rights reserved.</p></footer><!-- 引入脚本 --><script src="{{ url_for('static', filename='script.js') }}"></script>
</body>
</html>

9. style.css (CSS 文件)

最后是简单的样式文件 style.css,可以用来设置一些基础样式,使界面更美观。

/* static/css/style.css */
body {font-family: Arial, sans-serif;line-height: 1.6;background-color: #f4f4f4;margin: 0;padding: 0;
}header {background-color: #333;color: #fff;padding: 1rem;text-align: center;
}nav ul {list-style: none;padding: 0;
}nav ul li {display: inline;margin-right: 20px;
}nav ul li a {color: #fff;text-decoration: none;
}h1, h2 {color: #333;
}footer {text-align: center;background-color: #333;color: #fff;padding: 10px 0;
}form {margin: 20px auto;max-width: 500px;background: #fff;padding: 20px;box-shadow: 0 0 10px rgba(0,0,0,0.1);
}form input, form textarea, form button {width: 100%;padding: 10px;margin: 10px 0;border-radius: 5px;border: 1px solid #ddd;
}form button {background-color: #5cb85c;color: white;cursor: pointer;
}form button:hover {background-color: #4cae4c;
}
  • j结合第一弹和第二弹内容,可以直接构成一个python项目,可以直接运行哦,需要的可以在此基础上在进行扩展,进行页面美化、功能添加(留言、评论)等等。

代码运行后登陆的页面效果图
在这里插入图片描述

你要用努力和实力去惊艳时光,而非用抱怨和等待去荒废时光


http://www.ppmy.cn/devtools/144475.html

相关文章

怎么给git动图扣除背景?

环境&#xff1a; Wn10 专业版 python 问题描述&#xff1a; 怎么给git动图扣除背景&#xff1f; 解决方案&#xff1a; 要将一个 GIF 动图的尺寸改为 50x50 并且把黑色背景改成透明&#xff0c;您可以使用 Python 的 Pillow 库。Pillow 支持处理静态图像和动画 GIF。下面…

JaxaFx学习(三)

目录&#xff1a; &#xff08;1&#xff09;JavaFx MVVM架构实现 &#xff08;2&#xff09;javaFX知识点 &#xff08;3&#xff09;JavaFx的MVC架构 &#xff08;4&#xff09;JavaFx事件处理机制 &#xff08;5&#xff09;多窗体编程 &#xff08;6&#xff09;数据…

本地计算机上的MySQL服务启动后停止(connection refused: connect)解决一系列数据库连接不上的问题

推荐其他可能可以解决的博客&#xff1a; 【完美解决】mysql启动不了:本地计算机上的MySQL服务启动后停止-CSDN博客 1. 查看自己的mysql服务是否启动了&#xff0c;如果启动后又关闭了就使用下面这种方法 我是使用重新安装 MySQL 服务解决的 如果服务依然启动失败&#xf…

【计算机网络】期末考试预习复习|中

作业讲解 转发器、网桥、路由器和网关(4-6) 作为中间设备&#xff0c;转发器、网桥、路由器和网关有何区别&#xff1f; (1) 物理层使用的中间设备叫做转发器(repeater)。 (2) 数据链路层使用的中间设备叫做网桥或桥接器(bridge)。 (3) 网络层使用的中间设备叫做路…

构建lib项目-vite,rollup

目标&#xff1a;通过vite构建一个项目工程&#xff0c;能够构建出一个index.js的库。同时&#xff0c;能够将第三方的依赖打进包里。 基本步骤&#xff1a; 1. npm init -y 创建一个工程 2. 安装vite依赖 3. 创建vite.config.js配置文件 4. package.json的main字段配置 …

lvs介绍与应用

LVS介绍 LVS&#xff08;Linux Virtual Server&#xff09;是一种基于Linux操作系统的虚拟服务器技术&#xff0c;主要用于实现负载均衡和高可用性。它通过将客户端请求分发到多台后端服务器上&#xff0c;从而提高整体服务的处理能力和可靠性。lvs是基于集群的方式实现 集群…

Linux网络基础--传输层Tcp协议(上) (详细版)

目录 Tcp协议报头&#xff1a; 4位首部长度&#xff1a; 源端口号和目的端口号 32位序号和确认序号 标记位 超时重传机制&#xff1a; 两个问题 连接管理机制 三次握手&#xff0c;四次挥手 建立连接&#xff0c;为什么要有三次握手&#xff1f; 先科普一个概念&…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…