导图社区 python搭建
python搭建个人博客by Django
编辑于2019-07-03 11:12:24templates相关操作
blog
index.html
文章显示
使用for标签显示文章
{% for post in post_list %} <article class="post post-{{ post.pk }}"> ... </article>{% empty %} <div class="no-post">暂时还没有发布的文章!</div>{% endfor %}
post_list:视图函数index中传来的文章列表
post.pk:某篇文章所对应的id
设置单篇文章的标题
使用变量{{ post.title}}
设置单篇文章的分类
使用变量{{post.catagory.name}}
设置单篇文章的发布时间
使用变量{{post.created_time}}
设置单篇文章的作者
使用变量{{post.author}}
设置单篇文章的评论数
待定
设置单篇文章的浏览数
待定
尝试使用超链接路由: <a href="{{ post.get_absolute_url }}
设置单篇文章的摘要
使用变量{{post.excerpt}}
修改文章标题处的超链接,可跳转到文章详情页
<h1 class="entry-title"> <a href="{{ post.get_absolute_url }}">{{ post.title }}</a> </h1>
继承模板
在文件最顶部使用 {% extends 'base.html' %} 继承 base.html
修改main部分的具体显示内容
{% block main %} {% for post in post_list %} <article class="post post-1"> ... </article> {% empty %} <div class="no-post">暂时还没有发布的文章!</div> {% endfor %} <!-- 简单分页效果 <div class="pagination-simple"> <a href="#">上一页</a> <span class="current">第 6 页 / 共 11 页</span> <a href="#">下一页</a> </div> --> <div class="pagination"> ... </div> {% endblock main %}
子主题
detail.html
继承模板
在文件最顶部使用 {% extends 'base.html' %} 继承 base.html
在 {% block main %}{% endblock main %} 里填充 detail.html 页面应该显示的内容
修改 article 标签下的一些内容,让其显示文章的实际数据:<article class="post post-{{ post.pk }}"> <header class="entry-header"> <h1 class="entry-title">{{ post.title }}</h1> <div class="entry-meta"> <span class="post-category"><a href="#">{{ post.category.name }}</a></span> <span class="post-date"><a href="#"><time class="entry-date" datetime="{{ post.created_time }}">{{ post.created_time }}</time></a></span> <span class="post-author"><a href="#">{{ post.author }}</a></span> <span class="comments-link"><a href="#">4 评论</a></span> <span class="views-count"><a href="#">588 阅读</a></span> </div> </header> <div class="entry-content clearfix"> {{ post.body }} </div> </article>
在 {% block toc %}{% endblock toc %} 中填写 base.html 中没有的目录部分的内容
暂时用以下代码实现占位:{% block toc %} <div class="widget widget-content"> <h3 class="widget-title">文章目录</h3> <ul> <li> <a href="#">教程特点</a> </li> <li> <a href="#">谁适合这个教程</a> </li> <li> <a href="#">在线预览</a> </li> <li> <a href="#">资源列表</a> </li> <li> <a href="#">获取帮助</a> </li> </ul> </div> {% endblock toc %}
为{{post.body}}部分添加safe过滤器以成功在django中实现对HTML标签的转义
{{ post.body|safe }}
实现{{post.body}}中的代码部分高亮
虚拟环境下安装 Pygments
pip3 install Pygments
在base.html中引入css样式文件
<link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}">
base.html
基础模板
<main class="col-md-8"> {% block main %} {% endblock main %}</main><aside class="col-md-4"> {% block toc %} {% endblock toc %} ...</aside>
使用自定义的模板标签
{% load blog_tags %}
为了使用模板标签,我们首先需要在模板中导入存放这些模板标签的模块,这里是 blog_tags.py 模块。当时我们为了使用 static 模板标签时曾经导入过 {% load staticfiles %},这次在 {% load staticfiles %} 下再导入 blog_tags:
在最新文章处使用模板标签
<div class="widget widget-recent-posts"> <h3 class="widget-title">最新文章</h3> {% get_recent_posts as recent_post_list %} <ul> {% for post in recent_post_list %} <li> <a href="{{ post.get_absolute_url }}">{{ post.title }}</a> </li> {% empty %} 暂无文章! {% endfor %} </ul></div>
这里我们通过使用 get_recent_posts 模板标签获取到最新文章列表,然后我们通过 as 语法(Django 模板系统的语法)将获取的文章列表保存进了 recent_post_list 模板变量中,之后就可以通过 for 循环来循环显示文章列表数据了,这和我们在写首页视图时是一样的。
在归档部分使用模板标签