展示
template-404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<style>
.message {
position: absolute;
top: 20%;
right: 5%;
color: #fafafa;
font-size: 30px;
animation: textRotate 0.8s linear 0.5s infinite alternate;
}
body {
padding: 0px;
margin: 0px;
border: 0px;
width: 100%;
height: 100%;
}
@keyframes textRotate {
from {
transform-origin: top;
transform: rotateX(-30deg);
}
to {
transform-origin: top;
transform: rotateX(12deg);
}
}
.NotPage {
position: relative;
z-index: -10;
background: #000;
height: 100vh;
overflow: hidden;
display: flex;
font-family: "Anton", sans-serif;
justify-content: center;
align-items: center;
-webkit-perspective: 1000px;
perspective: 1000px;
}
div {
-webkit-transform-style: preserve-3d;
transform-style: preserve-3d;
}
.rail {
position: absolute;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
-webkit-transform: rotateX(-30deg) rotateY(-30deg);
transform: rotateX(-30deg) rotateY(-30deg);
}
.rail .stamp {
position: absolute;
width: 200px;
height: 200px;
display: flex;
justify-content: center;
align-items: center;
background: #141414;
color: #fff;
font-size: 7rem;
}
.rail .stamp:nth-child(1) {
-webkit-animation: stampSlide 40000ms -2300ms linear infinite;
animation: stampSlide 40000ms -2300ms linear infinite;
}
.rail .stamp:nth-child(2) {
-webkit-animation: stampSlide 40000ms -4300ms linear infinite;
animation: stampSlide 40000ms -4300ms linear infinite;
}
.rail .stamp:nth-child(3) {
-webkit-animation: stampSlide 40000ms -6300ms linear infinite;
animation: stampSlide 40000ms -6300ms linear infinite;
}
.rail .stamp:nth-child(4) {
-webkit-animation: stampSlide 40000ms -8300ms linear infinite;
animation: stampSlide 40000ms -8300ms linear infinite;
}
.rail .stamp:nth-child(5) {
-webkit-animation: stampSlide 40000ms -10300ms linear infinite;
animation: stampSlide 40000ms -10300ms linear infinite;
}
.rail .stamp:nth-child(6) {
-webkit-animation: stampSlide 40000ms -12300ms linear infinite;
animation: stampSlide 40000ms -12300ms linear infinite;
}
.rail .stamp:nth-child(7) {
-webkit-animation: stampSlide 40000ms -14300ms linear infinite;
animation: stampSlide 40000ms -14300ms linear infinite;
}
.rail .stamp:nth-child(8) {
-webkit-animation: stampSlide 40000ms -16300ms linear infinite;
animation: stampSlide 40000ms -16300ms linear infinite;
}
.rail .stamp:nth-child(9) {
-webkit-animation: stampSlide 40000ms -18300ms linear infinite;
animation: stampSlide 40000ms -18300ms linear infinite;
}
.rail .stamp:nth-child(10) {
-webkit-animation: stampSlide 40000ms -20300ms linear infinite;
animation: stampSlide 40000ms -20300ms linear infinite;
}
.rail .stamp:nth-child(11) {
-webkit-animation: stampSlide 40000ms -22300ms linear infinite;
animation: stampSlide 40000ms -22300ms linear infinite;
}
.rail .stamp:nth-child(12) {
-webkit-animation: stampSlide 40000ms -24300ms linear infinite;
animation: stampSlide 40000ms -24300ms linear infinite;
}
.rail .stamp:nth-child(13) {
-webkit-animation: stampSlide 40000ms -26300ms linear infinite;
animation: stampSlide 40000ms -26300ms linear infinite;
}
.rail .stamp:nth-child(14) {
-webkit-animation: stampSlide 40000ms -28300ms linear infinite;
animation: stampSlide 40000ms -28300ms linear infinite;
}
.rail .stamp:nth-child(15) {
-webkit-animation: stampSlide 40000ms -30300ms linear infinite;
animation: stampSlide 40000ms -30300ms linear infinite;
}
.rail .stamp:nth-child(16) {
-webkit-animation: stampSlide 40000ms -32300ms linear infinite;
animation: stampSlide 40000ms -32300ms linear infinite;
}
.rail .stamp:nth-child(17) {
-webkit-animation: stampSlide 40000ms -34300ms linear infinite;
animation: stampSlide 40000ms -34300ms linear infinite;
}
.rail .stamp:nth-child(18) {
-webkit-animation: stampSlide 40000ms -36300ms linear infinite;
animation: stampSlide 40000ms -36300ms linear infinite;
}
.rail .stamp:nth-child(19) {
-webkit-animation: stampSlide 40000ms -38300ms linear infinite;
animation: stampSlide 40000ms -38300ms linear infinite;
}
.rail .stamp:nth-child(20) {
-webkit-animation: stampSlide 40000ms -40300ms linear infinite;
animation: stampSlide 40000ms -40300ms linear infinite;
}
@-webkit-keyframes stampSlide {
0% {
-webkit-transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
}
100% {
-webkit-transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
}
}
@keyframes stampSlide {
0% {
-webkit-transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(130px);
}
100% {
-webkit-transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
transform: rotateX(90deg) rotateZ(-90deg) translateZ(-200px) translateY(-3870px);
}
}
.world {
-webkit-transform: rotateX(-30deg) rotateY(-30deg);
transform: rotateX(-30deg) rotateY(-30deg);
}
.world .forward {
position: absolute;
-webkit-animation: slide 2000ms linear infinite;
animation: slide 2000ms linear infinite;
}
.world .box {
width: 200px;
height: 200px;
-webkit-transform-origin: 100% 100%;
transform-origin: 100% 100%;
-webkit-animation: roll 2000ms cubic-bezier(1, 0.01, 1, 1) infinite;
animation: roll 2000ms cubic-bezier(1, 0.01, 1, 1) infinite;
}
.world .box .wall {
position: absolute;
width: 200px;
height: 200px;
background: rgba(10, 10, 10, 0.8);
border: 1px solid #fafafa;
box-sizing: border-box;
}
.world .box .wall::before {
content: "";
position: absolute;
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 7rem;
}
.world .box .wall:nth-child(1) {
-webkit-transform: translateZ(100px);
transform: translateZ(100px);
}
.world .box .wall:nth-child(2) {
-webkit-transform: rotateX(180deg) translateZ(100px);
transform: rotateX(180deg) translateZ(100px);
}
.world .box .wall:nth-child(3) {
-webkit-transform: rotateX(90deg) translateZ(100px);
transform: rotateX(90deg) translateZ(100px);
}
.world .box .wall:nth-child(3)::before {
-webkit-transform: rotateX(180deg) rotateZ(90deg) translateZ(-1px);
transform: rotateX(180deg) rotateZ(90deg) translateZ(-1px);
-webkit-animation: zeroFour 4000ms -2000ms linear infinite;
animation: zeroFour 4000ms -2000ms linear infinite;
}
.world .box .wall:nth-child(4) {
-webkit-transform: rotateX(-90deg) translateZ(100px);
transform: rotateX(-90deg) translateZ(100px);
}
.world .box .wall:nth-child(4)::before {
-webkit-transform: rotateX(180deg) rotateZ(-90deg) translateZ(-1px);
transform: rotateX(180deg) rotateZ(-90deg) translateZ(-1px);
-webkit-animation: zeroFour 4000ms -2000ms linear infinite;
animation: zeroFour 4000ms -2000ms linear infinite;
}
.world .box .wall:nth-child(5) {
-webkit-transform: rotateY(90deg) translateZ(100px);
transform: rotateY(90deg) translateZ(100px);
}
.world .box .wall:nth-child(5)::before {
-webkit-transform: rotateX(180deg) translateZ(-1px);
transform: rotateX(180deg) translateZ(-1px);
-webkit-animation: zeroFour 4000ms linear infinite;
animation: zeroFour 4000ms linear infinite;
}
.world .box .wall:nth-child(6) {
-webkit-transform: rotateY(-90deg) translateZ(100px);
transform: rotateY(-90deg) translateZ(100px);
}
.world .box .wall:nth-child(6)::before {
-webkit-transform: rotateX(180deg) rotateZ(180deg) translateZ(-1px);
transform: rotateX(180deg) rotateZ(180deg) translateZ(-1px);
-webkit-animation: zeroFour 4000ms linear infinite;
animation: zeroFour 4000ms linear infinite;
}
@-webkit-keyframes zeroFour {
0% {
content: "4";
}
100% {
content: "0";
}
}
@keyframes zeroFour {
0% {
content: "4";
}
100% {
content: "0";
}
}
@-webkit-keyframes roll {
0% {
-webkit-transform: rotateZ(0deg);
transform: rotateZ(0deg);
}
85% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
87% {
-webkit-transform: rotateZ(88deg);
transform: rotateZ(88deg);
}
90% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
100% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
}
@keyframes roll {
0% {
-webkit-transform: rotateZ(0deg);
transform: rotateZ(0deg);
}
85% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
87% {
-webkit-transform: rotateZ(88deg);
transform: rotateZ(88deg);
}
90% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
100% {
-webkit-transform: rotateZ(90deg);
transform: rotateZ(90deg);
}
}
@-webkit-keyframes slide {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-webkit-transform: translateX(-200px);
transform: translateX(-200px);
}
}
@keyframes slide {
0% {
-webkit-transform: translateX(0);
transform: translateX(0);
}
100% {
-webkit-transform: translateX(-200px);
transform: translateX(-200px);
}
}
</style>
</head>
<body>
<div class="NotPage">
<div class="message">功 能 开 发 中 ...</div>
<div class="rail">
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
<div class="stamp four">4</div>
<div class="stamp zero">0</div>
</div>
<div class="world">
<div class="forward">
<div class="box">
<div class="wall"></div>
<div class="wall"></div>
<div class="wall"></div>
<div class="wall"></div>
<div class="wall"></div>
<div class="wall"></div>
</div>
</div>
</div>
</div>
</body>
</html>
add_article.html
{% extends 'backend.html' %}
{% block title %}
<h3 class="h3">添加文章</h3>
{% endblock %}
{% block articles %}
<div>
<form method="post">
{% csrf_token %}
<div class="form-group">
<label for="">标题</label>
<input type="text" class="form-control" name="title">
</div>
<div class="form-group">
<label for="">内容</label>
<textarea name="content" id="editor_id" cols="200" rows="10" class="form-control"></textarea>
</div>
<div class="form-group">
<label for="">分类</label>
<select class="form-control" name="category">
{% for category in category_list %}
<option value="{{ category.id }}">{{ category.name }}</option>
{% endfor %}
</select>
</div>
<div class="form-group">
<label for="">标签</label>
<select class="form-control" multiple name="tag">
{% for tag in tag_list %}
<option value="{{ tag.id }}">{{ tag.name }}</option>
{% endfor %}
</select>
</div>
<div class="text-center">
<button class="btn btn-danger">新增文章</button>
</div>
</form>
</div>
{% endblock %}
{% block script %}
<script charset="utf-8" src="/static/kindeditor/kindeditor-all.js"></script>
<script charset="utf-8" src="/static/kindeditor/lang/zh-CN.js"></script>
<script>
KindEditor.ready(function (K) {
window.editor = K.create('#editor_id', {
width: '100%',
height: '600px',
resizeType: 0,
uploadJson: '/upload_file/',
filePostName: 'myfile',
extraFileUploadParams: {
csrfmiddlewaretoken: '{{ csrf_token }}'
}
});
});
</script>
{% endblock %}
article_detail.html
{% extends 'base.html' %}
{% block header %}
<link rel="stylesheet" href="/static/css/common_css.css">
{% endblock %}
{% block content %}
<h2 class="text-center" article_id="{{ article.id }}">{{ article.title }}</h2>
<hr>
{{ article.content|safe }}
<hr>
{# 点赞点踩#}
<div id="div_digg">
<div class="diggit dianji">
<span class="diggnum" id="digg_count">{{ article.up_number }}</span>
</div>
<div class="buryit dianji">
<span class="burynum" id="bury_count">{{ article.down_number }}</span>
</div>
<div class="clear"></div>
<div class="diggword" id="digg_tips">
</div>
</div>
{# 评论区#}
<div class="clearfix">
<div style="margin-bottom: 20px">
<h3><span id="id_commit_text" >评论列表</span></h3>
</div>
<ul class="list-group">
{% for commit in commit_list %}
<li class="list-group-item">
<div>
<span><a href="">{{ forloop.counter }} 楼</a></span>
<span>{{ commit.create_time|date:"Y-m-d H-i" }}</span>
<span><a href="/{{ commit.user.username }}">{{ commit.user.username }}</a></span>
<div class="pull-right">
<span><a href="">回复</a></span>
<span><a href="">删除</a></span>
</div>
<br>
{{ commit.content }}
</div>
</li>
{% endfor %}
</ul>
</div>
{# 评论框#}
{% if request.user.is_authenticated %}
<div>
<p><h4>发表评论</h4></p>
<p><textarea name="" id="id_text" cols="100" rows="10" style="margin-left: 10px"></textarea></p>
{# 警示框#}
<div class="alert alert-info alert-dismissible fade show" role="alert" >
<p style="margin-left: 50%">记得输入内容哟~</p>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<button class="btn btn-success pull-right" id="btn_commit">评论</button>
</div>
{% endif %}
{% endblock %}
{% block script %}
<script>
//给点赞和点踩分别绑定一个事件,分别提交
$('.dianji').click(function () {
//判断,有diggit就是点赞,有buryit就是点踩
var up = $(this).hasClass('diggit')
//发送ajax请求
$.ajax({
url: '/upanddown/',
method: 'post',
data: {
article_id: '{{ article.id }}', //被点的文章
up: up, // 点赞
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success: function (data) {
console.log(data)
$('#digg_tips').html(data.msg)
if (data.code == 100) {
// 让数字加1 赞+1 踩 +1
var num = Number($('.digg').children('span').html())
$('.digg').children('span').html(num + 1)
}
}
})
})
//评论功能
$('#btn_commit').click(function (){
var content = $("#id_text").val()
if (content){
$.ajax({
url:'/commit/',
method:'post',
data:{
article_id: '{{ article.id }}',
content: content,
csrfmiddlewaretoken: '{{ csrf_token }}'
},success:function (data){
console.log(data)
if(data.code == 100){
$("#id_text").val('') // 清空输入框内容
// 要写入前端的代码
var html_content = `
<li class="list-group-item">
<p><span class="fa fa-address-card-o">${data.username}:</span></p>
<p>${data.content}</p>
</ul>
`
$('.list-group').append(html_content) //写入改代码
}else {
console.log(data.msg)
}
}
})
}else {
$('#alert_error').obj.style.display=""
}})
</script>
{% endblock %}
backend.html
<!DOCTYPE html>
<html lang="en" data-bs-theme="light">
<head>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
<meta name="generator" content="Hugo 0.108.0">
<link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<script src="/static/js/dashboard.js"></script>
<style>
body {
font-size: .875rem;
}
.sidebar {
position: fixed;
top: 0;
bottom: 0;
left: 0;
z-index: 100;
padding: 48px 0 0;
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
}
@media (max-width: 767.98px) {
.sidebar {
top: 5rem;
}
}
.sidebar-sticky {
height: calc(100vh - 48px);
overflow-x: hidden;
overflow-y: auto;
}
.sidebar .nav-link {
font-weight: 500;
color: #333;
}
.sidebar .nav-link .feather {
margin-right: 4px;
color: #727272;
}
.sidebar .nav-link.active {
color: #2470dc;
}
.sidebar .nav-link:hover .feather,
.sidebar .nav-link.active .feather {
color: inherit;
}
.sidebar-heading {
font-size: .75rem;
}
.navbar-brand {
padding-top: .75rem;
padding-bottom: .75rem;
background-color: rgba(0, 0, 0, .25);
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
}
.navbar .navbar-toggler {
top: .25rem;
right: 1rem;
}
.navbar .form-control {
padding: .75rem 1rem;
}
.form-control-dark {
color: #fff;
background-color: rgba(255, 255, 255, .1);
border-color: rgba(255, 255, 255, .1);
}
.form-control-dark:focus {
border-color: transparent;
box-shadow: 0 0 0 3px rgba(255, 255, 255, .25);
}
</style>
{% block header %}
{% endblock %}
</head>
</body>
<header class="navbar navbar-dark sticky-top bg-dark flex-md-nowrap p-0 shadow">
<a class="navbar-brand col-md-3 col-lg-2 me-0 px-3 fs-6" href="#">CSND 后台管理</a>
<button class="navbar-toggler position-absolute d-md-none collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#sidebarMenu" aria-controls="sidebarMenu" aria-expanded="false"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<input class="form-control form-control-dark w-100 rounded-0 border-0" type="text" placeholder="您想问什么呢?"
aria-label="Search">
<div class="navbar-nav">
<div class="nav-item text-nowrap">
<a class="nav-link px-3" href="#">点击查找</a>
</div>
</div>
</header>
<div class="container-fluid">
<div class="row">
<nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse">
<div class="position-sticky pt-3 sidebar-sticky">
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">
<span data-feather="home" class="align-text-bottom"></span>
个人博客
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/add_article/">
<span data-feather="file" class="align-text-bottom"></span>
新建文章
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="shopping-cart" class="align-text-bottom"></span>
修改头像
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="users" class="align-text-bottom"></span>
文本草稿
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="bar-chart-2" class="align-text-bottom"></span>
博客主页
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="layers" class="align-text-bottom"></span>
个人站点
</a>
</li>
</ul>
<h6 class="sidebar-heading d-flex justify-content-between align-items-center px-3 mt-4 mb-1 text-muted text-uppercase">
<span>分类</span>
<a class="link-secondary" href="#" aria-label="Add a new report">
<span data-feather="plus-circle" class="align-text-bottom"></span>
</a>
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="file-text" class="align-text-bottom"></span>
分类一
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<span data-feather="file-text" class="align-text-bottom"></span>
分类二
</a>
</li>
</ul>
</div>
</nav>
<main class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
<div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
{% block title %}
<h3 class="h3"> {{ user.username }}的个人博客</h3>
{% endblock %}
<div class="btn-toolbar mb-2 mb-md-0">
<div class="btn-group me-2">
<button type="button" class="btn btn-sm btn-outline-secondary">Share</button>
<button type="button" class="btn btn-sm btn-outline-secondary">Export</button>
</div>
<button type="button" class="btn btn-sm btn-outline-secondary dropdown-toggle">
<span data-feather="calendar" class="align-text-bottom"></span>
This week
</button>
</div>
</div>
{% block articles %}
<div class="table-responsive">
<table class="table table-striped table-sm">
<thead>
<tr>
<th scope="col">文章ID</th>
<th scope="col">文章名字</th>
<th scope="col">创建时间</th>
<th scope="col">操作</th>
</tr>
</thead>
<tbody>
{% for article in article_list %}
<tr>
<td>{{ article.id }}</td>
<td>{{ article.title }}</td>
<td>{{ article.create_time|date:"Y年m月d日" }}</td>
<td>
<a href="" class="btn btn-success">编辑</a>
<a href="/delete/{{ article.id }}" class="btn btn-danger">删除</a>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}
</main>
</div>
</div>
{% block script %}
{% endblock %}
</html>
base.html
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
<meta name="generator" content="Hugo 0.108.0">
<title>Blog Template · Bootstrap v5.3</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
.nav-scroller .nav {
display: flex;
flex-wrap: nowrap;
padding-bottom: 1rem;
margin-top: -1px;
overflow-x: auto;
text-align: center;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
}
h1, h2, h3, h4, h5, h6 {
font-family: "Playfair Display", Georgia, "Times New Roman", serif /*rtl:Amiri, Georgia, "Times New Roman", serif*/;
}
@media (min-width: 768px) {
.display-4 {
font-size: 3rem;
}
}
@media (min-width: 768px) {
.h-md-250 {
height: 250px;
}
}
.blog-footer {
padding: 2.5rem 0;
color: #727272;
text-align: center;
background-color: #f9f9f9;
border-top: .05rem solid #e5e5e5;
}
.blog-footer p:last-child {
margin-bottom: 0;
}
.nav-scroller .nav {
display: flex;
flex-wrap: nowrap;
padding-bottom: 1rem;
margin-top: -1px;
overflow-x: auto;
text-align: center;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
}
html,
body {
overflow-x: hidden;
}
body {
padding-top: 56px;
}
@media (max-width: 991.98px) {
.offcanvas-collapse {
position: fixed;
top: 56px;
bottom: 0;
left: 100%;
width: 100%;
padding-right: 1rem;
padding-left: 1rem;
overflow-y: auto;
visibility: hidden;
background-color: #343a40;
transition: transform .3s ease-in-out, visibility .3s ease-in-out;
}
.offcanvas-collapse.open {
visibility: visible;
transform: translateX(-100%);
}
}
.nav-scroller .nav {
color: rgba(255, 255, 255, .75);
}
.nav-scroller .nav-link {
padding-top: .75rem;
padding-bottom: .75rem;
font-size: .875rem;
color: #6c757d;
}
.nav-scroller .nav-link:hover {
color: #007bff;
}
.nav-scroller .active {
font-weight: 500;
color: #343a40;
}
a {
color: rgb(255, 255, 255);
text-decoration: none;
}
a:hover {
color: rgb(19, 151, 199);
text-decoration: underline;
}
</style>
{% block header %}
{% endblock %}
</head>
<body>
<div class="header">
<nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark" aria-label="Main navigation">
<div class="container-fluid">
{% if request.user.is_authenticated %}
<div class="flex-shrink-0 dropdown">
<a href="#" class="d-block link-dark text-decoration-none dropdown-toggle" data-bs-toggle="dropdown"
aria-expanded="false">
<img src="media/{{ request.user.avatar }}" alt="mdo" width="32"
height="32"
class="rounded-circle">
</a>
<ul class="dropdown-menu text-small shadow" style="">
<li><a class="dropdown-item" href="">个人主页</a></li>
<li id="change_word"><a class="dropdown-item" href="#"><span data-bs-toggle="modal"
data-bs-target="#myModal">修改密码</span></a>
</li>
<li><a class="dropdown-item" href="#">修改头像</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="#">退出</a></li>
</ul>
</div>
{% else %}
<ul class="nav navbar-nav navbar-right">
<li><a href="/login/">登录</a></li>
</ul>
{% endif %}
<a class="navbar-brand" href="/">CSND</a>
<button class="navbar-toggler p-0 border-0" type="button" id="navbarSideCollapse"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse offcanvas-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">博客</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">下载</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">学习</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">社区</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">更多设置</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">创作中心</a></li>
<li><a class="dropdown-item" href="#">帮助</a></li>
<li><a class="dropdown-item" href="#">设置</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="您想问什么呢" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
</div>
{#模态框#}
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header p-5 pb-4 border-bottom-0">
<!-- <h1 class="modal-title fs-5" >Modal title</h1> -->
<h1 class="fw-bold mb-0 fs-2">修改密码</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal"
aria-label="Close"></button>
</div>
<div class="alert alert-primary " role="alert" id="alert_error">
<p style="text-align: center">提示大小姐来咯~</p>
</div>
<form class="">
{% csrf_token %}
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="old_password" name="old_password">
<label for="old_password">旧密码</label>
</div>
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="new_password" name="new_password">
<label for="new_password">新密码</label>
</div>
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="re_password" name="re_password">
<label for="re_password">确认密码</label>
</div>
</form>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="id_submit">确定</button>
</div>
</div>
</div>
</div>
<main class="container">
{% block biaoti %}
{% endblock %}
<div class="row g-5">
<div class="col-md-8">
{% block name %}
{% endblock %}
{% block content %}
{% endblock %}
</div>
<div class="col-md-4">
<div class="position-sticky" style="top: 2rem;">
{% load common_right %}
{% right username %}
</div>
</div>
</div>
</main>
</body>
{% block script %}
{% endblock %}
</html>
home.html
<!DOCTYPE html>
<html lang="en" data-bs-theme="light">
<head>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors">
<meta name="generator" content="Hugo 0.108.0">
<link rel="stylesheet" href="/static/font-awesome/css/font-awesome.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
.nav-scroller {
position: relative;
z-index: 2;
height: 2.75rem;
overflow-y: hidden;
}
.nav-scroller .nav {
display: flex;
flex-wrap: nowrap;
padding-bottom: 1rem;
margin-top: -1px;
overflow-x: auto;
text-align: center;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
}
html,
body {
overflow-x: hidden;
}
body {
padding-top: 56px;
}
@media (max-width: 991.98px) {
.offcanvas-collapse {
position: fixed;
top: 56px;
bottom: 0;
left: 100%;
width: 100%;
padding-right: 1rem;
padding-left: 1rem;
overflow-y: auto;
visibility: hidden;
background-color: #343a40;
transition: transform .3s ease-in-out, visibility .3s ease-in-out;
}
.offcanvas-collapse.open {
visibility: visible;
transform: translateX(-100%);
}
}
.nav-scroller .nav {
color: rgba(255, 255, 255, .75);
}
.nav-scroller .nav-link {
padding-top: .75rem;
padding-bottom: .75rem;
font-size: .875rem;
color: #6c757d;
}
.nav-scroller .nav-link:hover {
color: #007bff;
}
.nav-scroller .active {
font-weight: 500;
color: #343a40;
}
a {
color: rgba(1, 4, 12, 0.92);
text-decoration: none;
}
a:hover {
color: rgb(19, 151, 199);
text-decoration: underline;
}
.text-small {
font-size: 85%;
}
.dropdown-toggle {
outline: 0;
}
body {
min-height: 100vh;
}
main {
height: 100vh;
max-height: 100vh;
overflow-x: auto;
overflow-y: hidden;
}
.dropdown-toggle {
outline: 0;
}
.btn-toggle {
padding: .25rem .5rem;
font-weight: 600;
color: rgba(0, 0, 0, .65);
background-color: transparent;
}
.btn-toggle:hover,
.btn-toggle:focus {
color: rgba(0, 0, 0, .85);
background-color: #d2f4ea;
}
.btn-toggle::before {
width: 1.25em;
line-height: 0;
content: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='rgba%280,0,0,.5%29' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M5 14l6-6-6-6'/%3e%3c/svg%3e");
transition: transform .35s ease;
transform-origin: .5em 50%;
}
.btn-toggle[aria-expanded="true"] {
color: rgba(0, 0, 0, .85);
}
.btn-toggle[aria-expanded="true"]::before {
transform: rotate(90deg);
}
.btn-toggle-nav a {
padding: .1875rem .5rem;
margin-top: .125rem;
margin-left: 1.25rem;
}
.btn-toggle-nav a:hover,
.btn-toggle-nav a:focus {
background-color: #d2f4ea;
}
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
.b-example-divider {
height: 3rem;
background-color: rgba(0, 0, 0, .1);
border: solid rgba(0, 0, 0, .15);
border-width: 1px 0;
box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);
}
.b-example-vr {
flex-shrink: 0;
width: 1.5rem;
height: 100vh;
}
.bi {
vertical-align: -.125em;
fill: currentColor;
}
.nav-scroller {
position: relative;
z-index: 2;
height: 2.75rem;
overflow-y: hidden;
}
.nav-scroller .nav {
display: flex;
flex-wrap: nowrap;
padding-bottom: 1rem;
margin-top: -1px;
overflow-x: auto;
text-align: center;
white-space: nowrap;
-webkit-overflow-scrolling: touch;
}
</style>
</head>
<body class="bg-body-tertiary">
<svg xmlns="http://www.w3.org/2000/svg" class="d-none">
<symbol id="check2" viewBox="0 0 16 16">
<path d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"></path>
</symbol>
<symbol id="circle-half" viewBox="0 0 16 16">
<path d="M8 15A7 7 0 1 0 8 1v14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"></path>
</symbol>
<symbol id="moon-stars-fill" viewBox="0 0 16 16">
<path d="M6 .278a.768.768 0 0 1 .08.858 7.208 7.208 0 0 0-.878 3.46c0 4.021 3.278 7.277 7.318 7.277.527 0 1.04-.055 1.533-.16a.787.787 0 0 1 .81.316.733.733 0 0 1-.031.893A8.349 8.349 0 0 1 8.344 16C3.734 16 0 12.286 0 7.71 0 4.266 2.114 1.312 5.124.06A.752.752 0 0 1 6 .278z"></path>
<path d="M10.794 3.148a.217.217 0 0 1 .412 0l.387 1.162c.173.518.579.924 1.097 1.097l1.162.387a.217.217 0 0 1 0 .412l-1.162.387a1.734 1.734 0 0 0-1.097 1.097l-.387 1.162a.217.217 0 0 1-.412 0l-.387-1.162A1.734 1.734 0 0 0 9.31 6.593l-1.162-.387a.217.217 0 0 1 0-.412l1.162-.387a1.734 1.734 0 0 0 1.097-1.097l.387-1.162zM13.863.099a.145.145 0 0 1 .274 0l.258.774c.115.346.386.617.732.732l.774.258a.145.145 0 0 1 0 .274l-.774.258a1.156 1.156 0 0 0-.732.732l-.258.774a.145.145 0 0 1-.274 0l-.258-.774a1.156 1.156 0 0 0-.732-.732l-.774-.258a.145.145 0 0 1 0-.274l.774-.258c.346-.115.617-.386.732-.732L13.863.1z"></path>
</symbol>
<symbol id="sun-fill" viewBox="0 0 16 16">
<path d="M8 12a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM8 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 0zm0 13a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0v-2A.5.5 0 0 1 8 13zm8-5a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2a.5.5 0 0 1 .5.5zM3 8a.5.5 0 0 1-.5.5h-2a.5.5 0 0 1 0-1h2A.5.5 0 0 1 3 8zm10.657-5.657a.5.5 0 0 1 0 .707l-1.414 1.415a.5.5 0 1 1-.707-.708l1.414-1.414a.5.5 0 0 1 .707 0zm-9.193 9.193a.5.5 0 0 1 0 .707L3.05 13.657a.5.5 0 0 1-.707-.707l1.414-1.414a.5.5 0 0 1 .707 0zm9.193 2.121a.5.5 0 0 1-.707 0l-1.414-1.414a.5.5 0 0 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .707zM4.464 4.465a.5.5 0 0 1-.707 0L2.343 3.05a.5.5 0 1 1 .707-.707l1.414 1.414a.5.5 0 0 1 0 .708z"></path>
</symbol>
</svg>
<div class="dropdown position-fixed bottom-0 end-0 mb-3 me-3 bd-mode-toggle">
<button class="btn btn-bd-primary py-2 dropdown-toggle d-flex align-items-center" id="bd-theme" type="button"
aria-expanded="false" data-bs-toggle="dropdown" aria-label="Toggle theme (dark)">
<svg class="bi my-1 theme-icon-active" width="1em" height="1em">
<use href="#moon-stars-fill"></use>
</svg>
<span class="visually-hidden" id="bd-theme-text">Toggle theme</span>
</button>
<ul class="dropdown-menu dropdown-menu-end shadow" aria-labelledby="bd-theme-text" style="">
<li>
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="light"
aria-pressed="false">
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em">
<use href="#sun-fill"></use>
</svg>
Light
<svg class="bi ms-auto d-none" width="1em" height="1em">
<use href="#check2"></use>
</svg>
</button>
</li>
<li>
<button type="button" class="dropdown-item d-flex align-items-center active" data-bs-theme-value="dark"
aria-pressed="true">
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em">
<use href="#moon-stars-fill"></use>
</svg>
Dark
<svg class="bi ms-auto d-none" width="1em" height="1em">
<use href="#check2"></use>
</svg>
</button>
</li>
<li>
<button type="button" class="dropdown-item d-flex align-items-center" data-bs-theme-value="auto"
aria-pressed="false">
<svg class="bi me-2 opacity-50 theme-icon" width="1em" height="1em">
<use href="#circle-half"></use>
</svg>
Auto
<svg class="bi ms-auto d-none" width="1em" height="1em">
<use href="#check2"></use>
</svg>
</button>
</li>
</ul>
</div>
<div class="header">
<nav class="navbar navbar-expand-lg fixed-top navbar-dark bg-dark" aria-label="Main navigation">
<div class="container-fluid">
{% if request.user.is_authenticated %}
<div class="flex-shrink-0 dropdown">
<a href="#" class="d-block link-dark text-decoration-none dropdown-toggle" data-bs-toggle="dropdown"
aria-expanded="false">
<img src="media/{{ request.user.avatar }}" alt="mdo" width="32" height="32"
class="rounded-circle">
</a>
<ul class="dropdown-menu text-small shadow" style="">
<li><a class="dropdown-item" href="/backend/">后台管理</a></li>
<li id="change_word"><a class="dropdown-item" href="#"><span data-bs-toggle="modal"
data-bs-target="#myModal">修改密码</span></a>
</li>
<li><a class="dropdown-item" href="#">修改头像</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li><a class="dropdown-item" href="/logout/">退出</a></li>
</ul>
</div>
{% else %}
<ul class="nav navbar-nav navbar-right">
<li><a href="/login/" style="color: rgba(0,178,255,0.86);margin-right:5px">登录</a></li>
</ul>
{% endif %}
<a class="navbar-brand" href="#">CSND</a>
<button class="navbar-toggler p-0 border-0" type="button" id="navbarSideCollapse"
aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse offcanvas-collapse" id="navbarsExampleDefault">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">博客</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">下载</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">学习</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">社区</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" aria-expanded="false">更多设置</a>
<ul class="dropdown-menu">
<li><a class="dropdown-item" href="#">创作中心</a></li>
<li><a class="dropdown-item" href="#">帮助</a></li>
<li><a class="dropdown-item" href="#">设置</a></li>
</ul>
</li>
</ul>
<form class="d-flex" role="search">
<input class="form-control me-2" type="search" placeholder="您想问什么呢" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
<div class="nav-scroller bg-body shadow-sm">
<nav class="nav" aria-label="Secondary navigation">
<a class="nav-link active" aria-current="page" href="#">糖果爱上我</a>
<a class="nav-link" href="#">
消息
<span class="badge text-bg-light rounded-pill align-text-bottom">27</span>
</a>
<a class="nav-link" href="#">前端</a>
<a class="nav-link" href="#">后端</a>
<a class="nav-link" href="#">移动开发</a>
<a class="nav-link" href="#">编程语言</a>
<a class="nav-link" href="#">Java</a>
<a class="nav-link" href="#">Python</a>
<a class="nav-link" href="#">人工智能</a>
</nav>
</div>
</div>
{#模态框#}
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header p-5 pb-4 border-bottom-0">
<!-- <h1 class="modal-title fs-5" >Modal title</h1> -->
<h1 class="fw-bold mb-0 fs-2">修改密码</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal"
aria-label="Close"></button>
</div>
<div class="alert alert-primary " role="alert" id="alert_error">
<p style="text-align: center">提示大小姐来咯~</p>
</div>
{# <div class="alert alert-warning alert-dismissible fade in hidden" role="alert"#}
{# id="alert_error">#}
{# <button type="button" class="close" data-dismiss="alert"#}
{# aria-label="Close"><span#}
{# aria-hidden="true">×</span></button>#}
{# <strong>密码修改成功</strong>#}
{# </div>#}
<div class="modal-body p-5 pt-0">
<form class="">
{% csrf_token %}
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="old_password" name="old_password">
<label for="old_password">旧密码</label>
</div>
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="new_password" name="new_password">
<label for="new_password">新密码</label>
</div>
<div class="form-floating mb-4">
<input type="password" class="form-control rounded-3" id="re_password" name="re_password">
<label for="re_password">确认密码</label>
</div>
</form>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button type="button" class="btn btn-primary" id="id_submit">确定</button>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col-md-2">
<div class="flex-shrink-0 p-3 bg-white" style="width: 220px;">
<a href="/" class="d-flex align-items-center pb-3 mb-3 link-dark text-decoration-none border-bottom">
<i class="fa fa-paw" style="font-size:24px"></i>
<span class="fs-5 fw-semibold">Collapsible</span>
</a>
<ul class="list-unstyled ps-0">
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed"
data-bs-toggle="collapse" data-bs-target="#home-collapse" aria-expanded="false">
关于自己
</button>
<div class="collapse" id="home-collapse" style="">
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">关注</a></li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">我的评论文章</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">我的点赞文章</a>
</li>
</ul>
</div>
</li>
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed"
data-bs-toggle="collapse" data-bs-target="#dashboard-collapse" aria-expanded="false">
文章分类
</button>
<div class="collapse" id="dashboard-collapse" style="">
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">软件工程</a></li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">操作系统</a>
</li>
<li><a href="#" class="link-dark d-inline-flex text-decoration-none rounded">数据库</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">其他</a></li>
</ul>
</div>
</li>
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed"
data-bs-toggle="collapse" data-bs-target="#orders-collapse" aria-expanded="false">
精选博客
</button>
<div class="collapse" id="orders-collapse" style="">
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">新闻头条</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">特别头条</a></li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">最多点赞</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">最多评论</a></li>
</ul>
</div>
</li>
<li class="border-top my-3"></li>
<li class="mb-1">
<button class="btn btn-toggle d-inline-flex align-items-center rounded border-0 collapsed"
data-bs-toggle="collapse" data-bs-target="#account-collapse" aria-expanded="false">
更多
</button>
<div class="collapse" id="account-collapse" style="">
<ul class="btn-toggle-nav list-unstyled fw-normal pb-1 small">
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">所有随笔</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">最新评论</a>
</li>
<li><a href="#"
class="link-dark d-inline-flex text-decoration-none rounded">官方博客</a></li>
<li><a href="#" class="link-dark d-inline-flex text-decoration-none rounded">博客皮肤
</a></li>
</ul>
</div>
</li>
</ul>
</div>
</div>
<div class="col-md-7">
<div id="carouselExampleInterval" class="carousel slide" data-bs-ride="carousel">
<div class="carousel-inner" id="lbt">
<div class="carousel-item active" data-bs-interval="5000">
<a href="">
<img src="https://img-baofun.zhhainiao.com/fs/55a3e4c862060fd625d666ab5f9471ab.jpg"
class="d-block w-100" alt="...">
</a>
</div>
<div class="carousel-item" data-bs-interval="5000">
<a href="">
<img src="https://lmg.jj20.com/up/allimg/1112/060Q9134P2/1Z60Q34P2-8-1200.jpg"
class="d-block w-100" alt="...">
</a>
</div>
<div class="carousel-item" data-bs-interval="5000">
<a href="">
<img src="https://lmg.jj20.com/up/allimg/1011/12021G03252/1G202103252-6-1200.jpg"
class="d-block w-100" alt="...">
</a>
</div>
</div>
<button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleInterval"
data-bs-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="visually-hidden">Previous</span>
</button>
<button class="carousel-control-next" type="button" data-bs-target="#carouselExampleInterval"
data-bs-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="visually-hidden">Next</span>
</button>
</div>
<hr>
{% for article in article_list %}
<div class="media">
<h4 class="media-heading"><a href="/{{ article.blog.userinfo.username }}/articles/{{ article.id }}.html">{{ article.title }}</a></h4> {#文章标题#}
<div class="media-left">
<div class="row">
<div class="col-md-1">
<a href="/{{ article.blog.userinfo.username }}">
<img alt="64x64" class="media-object" style="width: 64px; height: 64px;"
{#用户头像#}
src="media/{{ article.blog.userinfo.avatar }}">
</a>
</div>
<div class="col-md-11" style="color: #555555">
{{ article.desc }} {#摘要#}
</div>
</div>
</div>
{# #文章尾部#}
<div class="bottom-article" style="margin-top: 8px">
{#作者名字#}
<span style="margin-right: 3px;color: #245269 "><a
href="/{{ article.blog.userinfo.username }}">{{ article.blog.userinfo.username }}</a></span>
{#文章发布时间,date过滤器#}
<span style="margin-right: 10px">发布博客{{ article.create_time|date:'Y-m-d H:i:s' }}</span>
{#点赞数量#}
<span class="fa fa-heart" style="margin-right: 4px">{{ article.up_number }}</span>
<span><i class="fa fa-user-circle"
{#点赞数#}
style="margin-right: 10px"></i><span>{{ article.commit_number }}</span></span>
</div>
</div>
<hr>
{% endfor %}
</div>
<div class="col-md-3">
<div class="my-3 p-3 bg-body rounded shadow-sm">
<h6 class="border-bottom pb-2 mb-0">向您推荐</h6>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#007bff"></rect>
<text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">CSDN指数</strong>
<a href="#">点击</a>
</div>
<span class="d-block">@糖喵喵</span>
</div>
</div>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#007bff"></rect>
<text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">Eolink开发者社区</strong>
<a href="#">点击</a>
</div>
<span class="d-block">@橙子汪汪</span>
</div>
</div>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#007bff"></rect>
<text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">Authing身份云</strong>
<a href="#">点击</a>
</div>
<span class="d-block">@南林大呆萌</span>
</div>
</div>
<small class="d-block text-end mt-3">
<a href="#">更多好玩内容~</a>
</small>
</div>
<div class="my-3 p-3 bg-body rounded shadow-sm">
<h6 class="border-bottom pb-2 mb-0">暖心博客</h6>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#007bff"></rect>
<text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text>
</svg>
<p class="pb-3 mb-0 small lh-sm border-bottom">
<strong class="d-block text-gray-dark">@橘子皮</strong>
不要沉醉于过去,不要遐想于未来,专注于即将流逝的现在...
</p>
</div>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#e83e8c"></rect>
<text x="50%" y="50%" fill="#e83e8c" dy=".3em">32x32</text>
</svg>
<p class="pb-3 mb-0 small lh-sm border-bottom">
<strong class="d-block text-gray-dark">@*夏野*</strong>
一定会和喜欢的人在夏日夜晚牵手慢步...
</p>
</div>
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32"
xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32"
preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#6f42c1"></rect>
<text x="50%" y="50%" fill="#6f42c1" dy=".3em">32x32</text>
</svg>
<p class="pb-3 mb-0 small lh-sm border-bottom">
<strong class="d-block text-gray-dark">@糖果爱上我</strong>
能管理好自己的情绪,你就是优雅的,能控制好自己的心态,你就是成功的...
</p>
</div>
<small class="d-block text-end mt-3">
<a href="#">更多</a>
</small>
</div>
</div>
</div>
</div>
</body>
<script>
// 修改密码警示款
$('#id_submit').click(function () {
// jquery 都是给标签修改属性--attr-自定义属性和prop->自有属性的区别
// 给按钮添加不可点击的属性
$(this).prop('disabled', true)
$.ajax({
url: '/change_password/',
method: 'post',
data: {
old_password: $('[name="old_password"]').val(),
new_password: $('[name="new_password"]').val(),
re_password: $('[name="re_password"]').val(),
csrfmiddlewaretoken: $('[name="csrfmiddlewaretoken"]').val()
},
success: function (data) {
console.log(data)
// 显示错误信息,并显示
$('#alert_error').children('p').html(data.msg)
// 让按钮可以点击
$('#id_submit').prop('disabled', false)
console.log(data.msg)
if (data.code == 200) {
$('#alert_error').addClass('hidden')
// 模态框消失
$('#myModal').modal('hide')
console.log(data.msg)
// 跳到登录,重新登录
location.href = '/login/'
} else {
// 3s 后,错误提示消失
setTimeout(function () {
$('#alert_error').addClass('alert-dismissible fade in hidden')
console.log(data.msg)
}, 3000)
}
}
})
})
</script>
</html>
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
<style>
html,
body {
height: 100%;
}
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 330px;
padding: 15px;
}
.form-, .form-floating:focus-within {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
a {
color: rgba(1, 4, 12, 0.92);
ext-decoration: none;
}
}
</style>
<body>
<main class="form-signin w-100 m-auto">
<div class="text-center">
<div class="form-group">
<label for="id_avatar">
<img class="mb-4 "
src="https://tse3-mm.cn.bing.net/th/id/OIP-C.VeJFhbdc95msPtA2RFHHbwAAAA?rs=1&pid=ImgDetMain"
alt="" height="80px" width="80px" id="id_img1"
style="margin-left: 20px">
</label>
<input type="file" id="id_avatar" class="form-control" accept="image/*" style="display: none">
<h1 class="h3 mb-3 fw-normal">糖果爱上我</h1>
</label>
</div>
</div>
<form id="login_form">
{% csrf_token %}
<div class="form-floating">
<div class="group-group">
<label for="id_username">用户名</label>
<input type="text" name="username" class="form-control"
id="id_username">
<span class="pull-right error" style="color: red"> </span>
</div>
<div class="form-group">
<label for="floatingInput">密码</label>
<input type="password" name="password" class="form-control"
id="id_password">
<span class="pull-right error" style="color: red"> </span>
</div>
<div class="form-group">
<label for="floatingInput">验证码</label>
<div class="row">
<div class="col-md-6">
<input type="text" name="code" class="form-control" id="id_code">
</div>
<img src="/get_code/" alt="" class="col-md-6" height="35" id="id_img">
</div>
</div>
</div>
</form>
<div class="w-100 btn btn-lg btn-primary" id="id_submit" style="margin-top: 20px">登录</div>
<span class="error" style="color: darkred;margin-left: 10px" id="id_error"></span>
<p style="color: #888888">您还没账号吗?那我们先注册一个吧~ <a href="/register/">滴滴</a></p>
<p class="mt-5 mb-3 text-muted">* 佳祺今天也要加油鸭</p>
</main>
</body>
<script>
$('#id_img').click(function () {
// img标签有个特性:只要src变了,就会重新src地址请求拿数据
var url = $(this).attr('src') + '?' // /get_code/???
console.log(url)
$(this).attr('src', url)
})
// 使用ajax做登录
$('#id_submit').click(function () {
var serialize_data = $('#login_form').serializeArray()
console.log(serialize_data)
var data = {}
// 简单
/*
$.each(serialize_data, function (i, v) {
data[v['name']] = v['value']
{
)#}
*/
var username = $('[name="username"]').val()
var password = $('[name="password"]').val()
var code = $('[name="code"]').val()
var csrfmiddlewaretoken = $('[name="csrfmiddlewaretoken"]').val()
data['username'] = username
data['password'] = password
data['code'] = code
data['csrfmiddlewaretoken'] = csrfmiddlewaretoken
console.log(data)
$.ajax({
url: '',
method: 'post',
data: data,
success: function (data) {
console.log(data)
if (data.code == 100) {
location.href = data.url
} else {
$("#id_error").html(data.msg)
}
}
})
}
)
</script>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" ></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
html,
body {
height: 100%;
}
body {
display: flex;
align-items: center;
padding-top: 40px;
padding-bottom: 40px;
background-color: #f5f5f5;
}
.form-signin {
max-width: 330px;
padding: 15px;
}
.form-, .form-floating:focus-within {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
</style>
<body>
<main class="form-signin w-100 m-auto">
<form id="register_form">
{% csrf_token %}
<div class="text-center">
<div class="form-group">
<label for="id_avatar">
<img class="mb-4 "
src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2Ff2bdcbad-2064-4b7e-8b99-3b31394f3162%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1704955726&t=7882c5db5f60980bf8ae3a61cc7d27b8"
alt="" height="80px" width="80px" id="id_img"
style="margin-left: 20px">
</label>
<input type="file" id="id_avatar" class="form-control" accept="image/*" style="display: none">
<h1 class="h3 mb-3 fw-normal">糖果爱上我</h1>
</label>
</div>
</div>
<div class="form-floating">
<form id="register_form">
{% for foo in form %}
<div class="form-group">
{# <label for="floatingInput">{{ foo.label }}:</label> {# 拿到表里中文名 #}
{# {{ foo }}#}
{{ foo.label }}
<input type="{{ foo.widget_type }}" name="{{ foo.name }}" class="form-control" id="{{ foo.auto_id }}">
<span class="pull-right error" style="color: red"> </span>{# placeholder="请输入{{ foo.label }}" #}
</div>
{% endfor %}
</form>
</div>
<div class="w-100 btn btn-lg btn-primary" id="id_submit" style="margin-top: 20px">注册</div>
<span class="error" style="color: darkred;margin-left: 10px" id="id_error"></span>
<p class="mt-5 mb-3 text-muted">* 佳祺今天也要加油鸭</p>
</form>
</main>
</body>
<script>
//1、监控文件变化
$('#id_avatar').change(function () {
var fileReader = new FileReader();
//放进文件阅读器
fileReader.readAsDataURL($('#id_avatar')[0].files[0])
//等文件读完,再放入,触发匿名函数,通过attr可以改所有属性
fileReader.onload = function () {
$('#id_img').attr('src', fileReader.result)
}
})
//2、按钮提交,注册功能
$('#id_submit').click(function () {
var formdata = new FormData()
// 把文件放入
formdata.append('my_img', $('#id_avatar')[0].files[0])
//放数据:用户名,密码,确认密码,手机号,邮箱 ,你可以一个个放--->笨办法
/*
formdata.append('username', $('#id_username').val())
formdata.append('password', $('#id_password').val())
formdata.append('re_password', $('#id_re_password').val())
formdata.append('phone', $('#id_phone').val())
formdata.append('email', $('#id_email').val())
formdata.append('csrfmiddlewaretoken', '
*/
// 简单方案
var register_form = $('#register_form').serializeArray() // 会把当前form表单中得数据放到列表套字典的形式
/*
数组
[{name:xx,value:yy}, {…}, {…}, {…}, {…}]
*/
//console.log(register_form)
// jq 的循环
$.each(register_form, function (i, v) {
//console.log(v['name'])
//console.log(v['value'])
formdata.append(v['name'], v['value'])
})
$.ajax({
url: '/register/',
method: 'post',
processData: false,
contentType: false,
data: formdata,
success: function (data) {
if (data.code == 100) {
location.href = '/login/'
} else { // 不成功
// 两次密码不一致,把错误写在 注册按钮后面
// input 自己的错误,写在自己后面
// 循环返回的错误
$.each(data.errors, function (key, value) {
if (key == '__all__') {
$('#id_error').html(value[0])
}
$('#id_' + key).next().html(value[0]).parent().addClass('has-error')
})
// 过3s后,清空错误,和红框
setTimeout(function () {
$('.error').html("").parent().removeClass('has-error')
//alert('asfdsdaf')
}, 3000)
}
}
})
})
//3、当用户名输入框失去焦点,我们就去后端校验用户是否注册
$('#id_username').blur(function () {
var username = $(this).val()
$.ajax({
url: '/check_username/?username=' + username,
method: 'get',
success: function (data) {
console.log(data)
if (data.code != 101) {
$('#id_username').val('').next().html(data.msg).parent().addClass('has-error')
}
}
})
})
</script>
</html>
rigit.html
<div class="my-3 p-3 bg-body rounded shadow-sm" >
<h5 class="border-bottom pb-2 mb-0 "style="color: #ffffff" >时间文档</h5>
{% for item in res_date %}
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#e83e8c"></rect>
<text x="50%" y="50%" fill="#e83e8c" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">{{ item.create_date|date:'Y年m月' }}({{ item.aritcle_count }})</strong>
<a href="/{{ user.username }}/archive/{{ item.create_date|date:'Y-m' }}.html"">点击</a>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="my-3 p-3 bg-body rounded shadow-sm">
<h5 class="border-bottom pb-2 mb-0 "style="color: #ffffff" >我的分类</h5>
{% for category in res_category %}
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#007bff"></rect>
<text x="50%" y="50%" fill="#007bff" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">{{ category.category__name }}({{ category.article_count }})</strong>
<a href="/{{ user.username }}/category/{{ category.category__id }}.html">点击</a>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="my-3 p-3 bg-body rounded shadow-sm">
<h5 class="border-bottom pb-2 mb-0 "style="color: #ffffff" >我的标签</h5>
{% for tag in res_tag %}
<div class="d-flex text-body-secondary pt-3">
<svg class="bd-placeholder-img flex-shrink-0 me-2 rounded" width="32" height="32" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Placeholder: 32x32" preserveAspectRatio="xMidYMid slice" focusable="false"><title>Placeholder</title>
<rect width="100%" height="100%" fill="#6f42c1"></rect>
<text x="50%" y="50%" fill="#6f42c1" dy=".3em">32x32</text>
</svg>
<div class="pb-3 mb-0 small lh-sm border-bottom w-100">
<div class="d-flex justify-content-between">
<strong class="text-gray-dark">{{ tag.tag__name }}({{ tag.article_count }})</strong>
<a href="/{{ user.username }}/tag/{{ tag.tag__id }}.html">点击</a>
</div>
</div>
</div>
{% endfor %}
</div>
site.html
{% extends 'base.html' %}
{% block biaoti %}
<div class="row mb-2">
<div class="col-md-6" style="margin-top: 30px">
<div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="row">
<div class="col-md-8">
<div class="col p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary">我的小世界</strong>
<h3 class="mb-0">关于努力</h3>
<div class="mb-1 text-muted">2023年12月~</div>
<p class="card-text mb-auto">生活不可能像你想象得那么好 但也不会像你想象得那么糟...</p>
<div style="margin-top: 40px">
<a href="#" class="stretched-link">滴滴答答</a>
</div>
</div>
</div>
<div class="col-md-4">
<img src="https://img1.baidu.com/it/u=2097685793,1392182149&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=889"
alt="">
</div>
</div>
</div>
</div>
<div class="col-md-6" style="margin-top: 30px">
<div class="row g-0 border rounded overflow-hidden flex-md-row mb-4 shadow-sm h-md-250 position-relative">
<div class="row">
<div class="col-md-8">
<div class="col p-4 d-flex flex-column position-static">
<strong class="d-inline-block mb-2 text-primary">异想星空</strong>
<h3 class="mb-0">关于情感</h3>
<div class="mb-1 text-muted">2023年12月~</div>
<p class="card-text mb-auto">
关于我想你的瞬间每天都会发生无数次,像满天星,细细碎碎攒起来能照亮整个天空...</p>
<div style="margin-top: 35px">
<a href="#" class="stretched-link">滴滴答答</a>
</div>
</div>
</div>
<div class="col-md-4">
<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F201805%2F10%2F20180510195509_ndjtk.thumb.1000_0.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1704941585&t=7689dce9f86472fb0cdd762c98cc23e9"
alt="">
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block name %}
<h3 class="pb-4 mb-4 fst-italic border-bottom">
{{ user.username }}的个人博客
</h3>
{% endblock %}
{% block content %}
{% for article in article_list %}
<div class="media">
<h4 class="media-heading" style="font-weight: bolder"><a href="/{{ username }}/articles/{{ article.id }}.html">{{ article.title }}</a></h4>{#文章标题#}
<div class="media-left">
<div class="row">
<div class="col-md-1">
<a href=" ">
<img alt="64x64" class="media-object" style="width: 64px; height: 64px;"
{#用户头像#}
src="/media/{{ request.user.avatar }}/">
</a>
</div>
<div class="col-md-11" style="color: rgba(255,255,255,0.85)">
{{ article.desc }} {#摘要#}
</div>
</div>
</div>
{# #文章尾部#}
<div class="bottom-article" style="margin-top: 8px">
{#作者名字#}
<span style="margin-right: 3px;color: #245269 "><a
href="">{{ article.blog.userinfo.username }}</a></span>
{#文章发布时间,date过滤器#}
<span style="margin-right: 10px">发布博客{{ article.create_time|date:'Y-m-d H:i:s' }}</span>
{#点赞数量#}
<span class="fa fa-heart" style="margin-right: 4px">{{ article.up_number }}</span>
<span><i class="fa fa-user-circle"
{#点赞数#}
style="margin-right: 10px"></i><span>{{ article.commit_number }}</span></span>
</div>
</div>
<hr>
{% endfor %}
{% endblock %}
今日思维导图: