更多最新原创文章请访问:最新原创主页
更多最全原创文章请访问:更多原创主页
1 base.html的抽取
不难看出,当我们点击详情页,只不过是把首页的内容给换掉了,但是左右的标签是上下的内容还是一样的,我们有必要进行抽取出公共的内容
1 先复制一份index.html 的,命名为base.html
{% load staticfiles %}
<html>
<head>
<title>Black & Whitetitle>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<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' %}">
<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>Blackb> & Whitea>h1>
div>
div>
<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>
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>
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="#">Djangoa>
li>
<li>
<a href="#">Pythona>
li>
<li>
<a href="#">Javaa>
li>
<li>
<a href="#">笔记a>
li>
<li>
<a href="#">文档a>
li>
<li>
<a href="#">AngularJSa>
li>
<li>
<a href="#">CSSa>
li>
<li>
<a href="#">JavaScripta>
li>
<li>
<a href="#">Snippeta>
li>
<li>
<a href="#">jQuerya>
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>
<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">
<ul>
<li><a href="">1a>li>
<li><a href="">...a>li>
<li><a href="">4a>li>
<li><a href="">5a>li>
<li class="current"><a href="">6a>li>
<li><a href="">7a>li>
<li><a href="">8a>li>
<li><a href="">...a>li>
<li><a href="">11a>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>
form>
<div class="comment-list-panel">
<h3>评论列表,共 <span>4span> 条评论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:56time>
<div class="text">
文章观点又有道理又符合人性,这才是真正为了表达观点而写,不是为了迎合某某知名人士粉丝而写。我觉得如果琼瑶是前妻,生了三孩子后被一不知名的女人挖了墙角,我不信谁会说那个女人是追求真爱,说同情琼瑶骂小三的女人都是弱者。
div>
li>
<li class="comment-item">
<span class="nickname">zmrenwuspan>
<time class="submit-date" datetime="2012-11-09T23:15:57+00:00">2017年3月11日 23:56time>
<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:56time>
<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:56time>
<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[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})
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中加入:
这里的样式在我们的css模板中,当然你可以自己选一套自己喜欢的
5,现在我们就可以看到我们的markdown的文本内容了:
这一节主要讲了base.html 的抽取,详情页的显示 与markdown语法的使用。