Django 快速搭建博客 第七节(文章详情页,markdown语法)
版权声明:
更多最新原创文章请访问:最新原创主页
更多最全原创文章请访问:更多原创主页
上一节我们把真正的index.html显示出来了,只是一个摘要,接下来我们要做的是当我们点击标题或者继续阅读的时候,会打开详情页
1 base.html的抽取
不难看出,当我们点击详情页,只不过是把首页的内容给换掉了,但是左右的标签是上下的内容还是一样的,我们有必要进行抽取出公共的内容
1 先复制一份index.html 的,命名为base.html
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head><title>Black & White</title><!-- meta --><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- css --><link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css"><link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}"><link rel="stylesheet" href="{% static 'blog/css/pace.css' %}"><link rel="stylesheet" href="{% static 'blog/css/custom.css' %}"><link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}"><!-- js --><script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script><script src="{% static 'blog/js/bootstrap.min.js' %}"></script><script src="{% static 'blog/js/pace.min.js' %}"></script><script src="{% static 'blog/js/modernizr.custom.js' %}"></script>
</head><body>
<div class="container"><header id="site-header"><div class="row"><div class="col-md-4 col-sm-5 col-xs-8"><div class="logo"><h1><a href="index.html"><b>Black</b> & White</a></h1></div></div><!-- col-md-4 --><div class="col-md-8 col-sm-7 col-xs-4"><nav class="main-nav" role="navigation"><div class="navbar-header"><button type="button" id="trigger-overlay" class="navbar-toggle"><span class="ion-navicon"></span></button></div><div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"><ul class="nav navbar-nav navbar-right"><li class="cl-effect-11"><a href="index.html" data-hover="首页">首页</a></li><li class="cl-effect-11"><a href="full-width.html" data-hover="博客">博客</a></li><li class="cl-effect-11"><a href="about.html" data-hover="关于">关于</a></li><li class="cl-effect-11"><a href="contact.html" data-hover="联系">联系</a></li></ul></div><!-- /.navbar-collapse --></nav><div id="header-search-box"><a id="search-menu" href="#"><span id="search-icon" class="ion-ios-search-strong"></span></a><div id="search-form" class="search-form"><form role="search" method="get" id="searchform" action="#"><input type="search" placeholder="搜索" required><button type="submit"><span class="ion-ios-search-strong"></span></button></form></div></div></div><!-- col-md-8 --></div></header>
</div>
<div class="copyrights">Collect from <a href="http://www.cssmoban.com/">网页模板</a></div>
<div class="copyrights">Modified by <a href="http://zmrenwu.com/">追梦人物的博客</a></div><div class="content-body"><div class="container"><div class="row"><main class="col-md-8">{% block main %}{% endblock main %}</main><aside class="col-md-4">{% block toc %}{% endblock toc %}<div class="widget widget-recent-posts"><h3 class="widget-title">最新文章</h3><ul><li><a href="#">Django 博客开发入门教程:前言</a></li><li><a href="#">Django 博客使用 Markdown 自动生成文章目录</a></li><li><a href="#">部署 Django 博客</a></li></ul></div><div class="widget widget-archives"><h3 class="widget-title">归档</h3><ul><li><a href="#">2017 年 5 月</a></li><li><a href="#">2017 年 4 月</a></li><li><a href="#">2017 年 3 月</a></li></ul></div><div class="widget widget-category"><h3 class="widget-title">分类</h3><ul><li><a href="#">Django 博客教程 <span class="post-count">(13)</span></a></li><li><a href="#">Python 教程 <span class="post-count">(11)</span></a></li><li><a href="#">Django 用户认证 <span class="post-count">(8)</span></a></li></ul></div><div class="widget widget-tag-cloud"><h3 class="widget-title">标签云</h3><ul><li><a href="#">Django</a></li><li><a href="#">Python</a></li><li><a href="#">Java</a></li><li><a href="#">笔记</a></li><li><a href="#">文档</a></li><li><a href="#">AngularJS</a></li><li><a href="#">CSS</a></li><li><a href="#">JavaScript</a></li><li><a href="#">Snippet</a></li><li><a href="#">jQuery</a></li></ul></div><div class="rss"><a href=""><span class="ion-social-rss-outline"></span> RSS 订阅</a></div></aside></div></div>
</div>
<footer id="site-footer"><div class="container"><div class="row"><div class="col-md-12"><p class="copyright">© 2017 - 采集自<a href="http://www.cssmoban.com/"target="_blank" title="模板之家">模板之家</a>- 由<a href="http://zmrenwu.com/" title="网页模板" target="_blank">追梦人物的博客</a>修改</p></div></div></div>
</footer><!-- Mobile Menu -->
<div class="overlay overlay-hugeinc"><button type="button" class="overlay-close"><span class="ion-ios-close-empty"></span></button><nav><ul><li><a href="index.html">首页</a></li><li><a href="full-width.html">博客</a></li><li><a href="about.html">关于</a></li><li><a href="contact.html">联系</a></li></ul></nav>
</div><script src="{% static 'blog/js/script.js' %}"></script></body>
</html>
主要是修改了这里:
这里的{% block main%} 和{% block toc %}
是我们自己随便命名的,当然你也可以根据你的想法进行命名
2, 接下来写我们的index.html 和detail.html,主要是写{% block main %} 和 {% block toc %}
里面的代码,注意:这里我们要继承’base.html’,这里相当于base.html是index.html 和 detail.html的父类。
(1) index.html
{% extends 'base.html' %}{% block main %}{% for post in post_list %}<article class="post post-{{ post.pk }}"><header class="entry-header"><h1 class="entry-title"><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></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"><p>{{ post.excerpt }}</p><div class="read-more cl-effect-14"><a href="{{ post.get_absolute_url }}" class="more-link">继续阅读 <span class="meta-nav">→</span></a></div></div></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"><ul><li><a href="">1</a></li><li><a href="">...</a></li><li><a href="">4</a></li><li><a href="">5</a></li><li class="current"><a href="">6</a></li><li><a href="">7</a></li><li><a href="">8</a></li><li><a href="">...</a></li><li><a href="">11</a></li></ul></div>
{% endblock main %}
(2) detail.html里面的代码:
{% extends 'base.html' %}{% block main %}<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|safe }}</div></article><section class="comment-area" id="comment-area"><hr><h3>发表评论</h3><form action="#" method="post" class="comment-form"><div class="row"><div class="col-md-4"><label for="id_name">名字:</label><input type="text" id="id_name" name="name" required></div><div class="col-md-4"><label for="id_email">邮箱:</label><input type="email" id="id_email" name="email" required></div><div class="col-md-4"><label for="id_url">网址:</label><input type="text" id="id_url" name="url"></div><div class="col-md-12"><label for="id_comment">评论:</label><textarea name="comment" id="id_comment" required></textarea><button type="submit" class="comment-btn">发表</button></div></div> <!-- row --></form><div class="comment-list-panel"><h3>评论列表,共 <span>4</span> 条评论</h3><ul class="comment-list list-unstyled"><li class="comment-item"><span class="nickname">追梦人物</span><time class="submit-date" datetime="2012-11-09T23:15:57+00:00">2017年3月12日 14:56</time><div class="text">文章观点又有道理又符合人性,这才是真正为了表达观点而写,不是为了迎合某某知名人士粉丝而写。我觉得如果琼瑶是前妻,生了三孩子后被一不知名的女人挖了墙角,我不信谁会说那个女人是追求真爱,说同情琼瑶骂小三的女人都是弱者。</div></li><li class="comment-item"><span class="nickname">zmrenwu</span><time class="submit-date" datetime="2012-11-09T23:15:57+00:00">2017年3月11日 23:56</time><div class="text">本能有可能会冲破格局,但格局有时候也会拘住本能。</div></li><li class="comment-item"><span class="nickname">蝙蝠侠</span><time class="submit-date" datetime="2012-11-09T23:15:57+00:00">2017年3月9日 8:56</time><div class="text">其实真理一般是属于沉默的大多数的。那些偏激的观点只能吸引那些同样偏激的人。前几年琼瑶告于妈抄袭,大家都表示大快人心,说明吃瓜观众都只是就事论事,并不是对琼瑶有偏见。</div></li><li class="comment-item"><span class="nickname">长江七号</span><time class="submit-date" datetime="2012-11-09T23:15:57+00:00">2017年2月12日 12:56</time><div class="text">观点我很喜欢!就是哎嘛本来一清二楚的,来个小三小四乱七八糟一团乱麻夹缠不清,简直麻烦要死</div></li></ul></div></section>
{% endblock main %}
{% 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 %}
因为这里的{% block toc %}和{% endblock toc %}我们暂时还没有用到现在动的main里面的内容
2 文章详情页的显示
1 , 在blog/urls下:
url(r'^post/(?P<pk>[0-9]+)/$',views.detail,name='detail'),
简单的说一下,因为每篇文章我们查看会显示类似与:xxx/post/1 , xxx/post/2这样子的,所以post 开头,(?P[0-9]+) 是python中的一个命名组:(?P) 先暂时固定的写,这里指的是数据库里面唯一索引的ID , [0-9]+ 说明数字出现一次或多次
2 , 在blog/views下:
def detail(request,pk):post = get_object_or_404(Post,pk=pk)return render(request,'blog/detail.html',context={'post':post})
3, 在对应的detail.html上把内容填写一下:
4,当我再一次运行一下,点击标题,或者继续阅读,我们就可以看到详情页里面的内容了。
2 加入markdown语法高亮
1,因为我是用Ubuntu系统的电脑,所以在pycharm下的terminal直接执行
sudo pip install markdown
这里已经告诉我已经安装过了,因为我这是第三次写django练习了,
我们再安装一下:
sudo pip install Pygments
可能这个我们在项目中会什么没做,但是Pygments在后台为我们做了很多事,它把高亮的一些语法转为css样式,把代码分成了一个一个单词,现在你要想看到结果的话,直接右键查看源码就能看到了。
2, 我们在blog/views进行markdown的配置,当然啦,这里只对文章内容进行markdown显示
当我们重新运行下的时候,发现markdown并没有生效,很乱的标签:
3, 这是因为我们在detail中还没有进行设置,
在detail.html下进行设置:
safe的说明:引用:safe 是 Django 模板系统中的过滤器(Filter),可以简单地把它看成是一种函数,其作用是作用于模板变量,将模板变量的值变为经过滤器处理过后的值。例如这里 {{ post.body|safe }},本来 {{ post.body }} 经模板系统渲染后应该显示 body 本身的值,但是在后面加上 safe 过滤器后,渲染的值不再是body 本身的值,而是由 safe 函数处理后返回的值。过滤器的用法是在模板变量后加一个 | 管道符号,再加上过滤器的名称。可以连续使用多个过滤器,例如 {{ var|filter1|filter2 }}。
4 ,这时候我们再引入一套可爱的css样式,用于设置高亮的code,
在base.html中加入:
<link rel="stylesheet" href="{% static 'blog/css/highlights/github.css' %}">
这里的样式在我们的css模板中,当然你可以自己选一套自己喜欢的
5,现在我们就可以看到我们的markdown的文本内容了:
这一节主要讲了base.html 的抽取,详情页的显示 与markdown语法的使用。
Django 快速搭建博客 第七节(文章详情页,markdown语法)相关推荐
- Django 快速搭建博客 第十一节(文章阅读量统计,自动生成文章摘要)
这一节主要做一些修补工作,一个是:文章阅读量的统计,另一个是自动生成文章摘要内容 1 . 文章阅读量的统计: 1 文章阅读量的统计,我们需要在model下的Post类中新加入一个views 字段用来统 ...
- django博客项目8:文章详情页
首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...
- 使用coding和hexo快速搭建博客
更多精彩内容欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz或者http://www.zh66.club期待您的光临哦!我是皮皮猪,感谢各位光临,能为您排忧解难小站深感荣幸!祝 ...
- 【django】搭建博客教程(2)——Template的使用
测试Template 前面我们只是将后端的数据显示到页面上而已,这并不能满足我们的需求,实际上,我们需要用到html,css,js,jquery等等来构建我们的博客.在界面设计方面,我们使用Boots ...
- Hugo+GitHub快速搭建博客
首先,搭建一个个人的博客网站,并不复杂,在这里,我们需要用到hugo这个框架,来管理我们本地的博客仓库地址.但我在搭建的时候也踩了一些坑.记录一下.以下均是在mac环境进行的. 在mac和linux环 ...
- 快速搭建博客-简单篇之快速搭建
原文地址:点此查看效果 文章目录 开篇博客-说明 第一次创建命令 致谢 开篇博客-说明 专注分享JAVA全栈技术,JAVA零基础到高级,数据结构,框架,设计模式,微服务,中间件,大数据,网络爬虫,开源 ...
- 从零开始搭建博客Hexo-Node-Git搭建博客
从零开始搭建博客第一部分,Github注册及Github Pages建立 什么是 Hexo? Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在 ...
- Django实现简单博客系统
Django实现简单博客系统 第一节 - 基础 1. 简单的导览图,学会不迷路 2. 基本操作介绍 3. 命令简单介绍 4. mysite:所建项目的管理功能目录 5. blog:我们创建的项目之一 ...
- 基于Spring Boot+Vue的博客系统 16——热门文章功能简单的实现
废弃说明: 这个专栏的文章本意是记录笔者第一次搭建博客的过程,文章里里有很多地方的写法都不太恰当,现在已经废弃,关于SpringBoot + Vue 博客系列,笔者重新写了这个系列的文章,不敢说写的好 ...
最新文章
- python3 配置文件操作库 configparser 读取配置文件后 元组列表转字典
- Python函数封装:利用正则表达式compile、findall对多组关键词进行模糊查询并返回统计个数,findall截取两个指定符号之间的内容
- 谋定技术加工领域 中国-巴对话(国际)农民丰收节贸易会
- MySQL Group Replication 部署 (Single Master)
- memset函数详细说明 1
- Flask中那些特殊的装饰器
- JS中定时器的返回数值ID值
- JavaScript学习之旅-9(原创)
- hibernate_Restrictions用法 .
- python xpath爬虫_[爬虫]python下的xpath清洗数据之html数据清洗
- 联想换机助手_Smart Switch.apk下载|S换机助手下载 v3.4.04 安卓版_最火软件站
- 步进电机结构C语言程序,51单片机驱动步进电机(含电路图和C语言源程序代码)
- Centos7环境启动mongod报polkit服务启动失败
- Deep Learning论文翻译(Nature Deep Review)
- 《速通深度学习数学基础》
- 数字IC所用软件及IP分类
- Git之将master合并到自己分支
- mt4服务器文件夹,MT4服务器地址在哪个文件
- 无法达成目标的五个关键因素
- Apicloud之亲加模块的使用方法