blog真正的首页
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用
上一节我们阐明了django的开发流程,首先把url和响应的处理函数绑定,一般卸载urls.py文件里,然后在工程的urls.oy文件引入,其次是编写我们的视图函数,视图中需要渲染模版,我们在settings.py中进行了模版相关的配置,让django能够找到需要渲染的模版,最后把渲染完成的http响应返回就可以了。
修改首页视图函数
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
# Create your views here. def index(request):
post_list = Post.objects.all()
return render(request, 'blog/index.html', context={'post_list': post_list})
我们在前面讲解过模型管理器objects的使用,这里我们使用all()方法从数据库里获取了全部的文章,存在了post_list变量里,然后如前一节所做,我们渲染了blog/index.html模版文件,并且把包含文章列表的post_list变量传给了模版。
处理CSS和JS
项目从网上下载了一套博客模版,除了html文档,还有css和js文件以让网页呈现出我们现在看到的样式,同样需要对django做一些必要的配置,才能让django知道如何在开发服务器中引入这些css金额js文件,这样才能让博客页面的css样式生效。
我们把css和js文件放在blog应用下的static文件夹下,因此现在blog应用下建立一个sattic文件夹。同时,为了避免和其它app中的css和js文件命名冲突,我们再在static文件夹下建立一个blog文件夹,把下载的css和就是放在这个目录

接着用django的方式加载css文件和js文件,css和js文件一般在html中的head标签中引入,打开index文件,找到引用cs和js文件的标签。css 样式文件在 link 标签的 href 属性里,而 js 文件在 script 标签的 src 属性里。可以看到诸如 href="css/bootstrap.min.css" 或者 src="js/jquery-2.1.3.min.js" 这样的引用。


由于引用文件的路径不对,所以引入失败,我们需要把他们改成正确的路径,把代码改成下面样子,正确地引入static文件下的css和js文件。
1. 首先我们要现在html文档中写下 { % load staticfiles % },加载静态文件。
2. 然后在修改link中的href属性修改为此种格式 { % static blog/css/.... % }和{ % static blog/js/.... % }
用{%%}包裹起来的叫做模版标签,我们前面说过用{{ }}包裹的叫做模版变量,其作用是在最终渲染的模版里显示由视图函数传过来的变量的值,而这里我们使用的模版标签的功能类是函数,例如这里的static模版标签,它把跟在她后面的字符串‘css/bootstrap.min.css’转换成正确的文件引入路径,这样css和js文件才能被正确加载,样式才能正常显示
在模板 index.html 中你会找到一系列 article 标签:
...
<article class="post post-1">
...
</article> <article class="post post-2">
...
</article> <article class="post post-3">
...
</article>
...
这里面包裹的内容就是显示的文章数据了。我们前面在视图函数 index 里给模板传了一个 post_list 变量,它里面包含着从数据库中取出的文章数据列表。就像 Python 一样,我们可以在模板中循环这个列表,把文章一篇篇循环出来,然后一篇篇显示文章的数据。要在模板中使用循环,需要使用到前面提到的模板标签,这次使用 {% for %} 模板标签。删掉多余的 article 标签,只留下一个 article 标签,然后写下列代码:
...
{% for post in post_list %}
<article class="post post-1">
...
</article>
{% empty %}
<div class="no-post">暂时还没有发布的文章!</div>
{% endfor %}
...
可以看到语法和 Python 的 for 循环类似,只是被 {% %} 这样一个模板标签符号包裹着。{% empty %} 的作用是当 post_list 为空,即数据库里没有文章时显示 {% empty %} 下面的内容,最后我们用 {% endfor %} 告诉 django 循环在这里结束了。
现在我们可以在循环体内通过 post 变量访问单篇文章了。分析 article 标签里面的 html 内容,h1 显示的是文章的标题,
<h1 class="entry-title">
<a href="single.html">Adaptive Vs. Responsive Layouts And Optimal Text Readability</a>
</h1>
我们把标题替换成 post 中的数据
<h1 class="entry-title">
<a href="single.html">{{ post.title }}</a>
</h1>
这里 post 是 Post 类的一个实例,通过引用它的 title 属性获取 title 的值。注意要把它包裹在模板变量里,因为它最终要被替换成实际的 title 值。
<div class="entry-meta">
<span class="post-category"><a href="#">Web Design</a></span> <span class="post-date"><a href="#"><time class="entry-date"
datetime="2012-11-09T23:15:57+00:00">February 2, 2013</time></a></span> <span class="post-author"><a href="#">Albert Einstein</a></span> <span class="comments-link"><a href="#">4 Comments</a></span>
</div>
这 4 个 span 标签里分别显示了 分类(category)、文章发布时间、文章作者、评论数。再次替换掉一些数据,由于评论数暂时没法替换,因此先留着,我们在实现了评论功能后再来修改它:
<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 Comments</a></span>
</div>
<div class="entry-content clearfix">
<p>...</p>
<div class="read-more cl-effect-14">
<a href="#" class="more-link">Continue reading <span class="meta-nav">→</span></a>
</div>
</div>
这里 p 标签里显示的是摘要,替换成 post 的摘要,另外 Continue reading 表示继续阅读,汉化一下:
<div class="entry-content clearfix">
<p>{{ post.excerpt }}</p>
<div class="read-more cl-effect-14">
<a href="#" class="more-link">继续阅读 <span class="meta-nav">→</span></a>
</div>
</div>
再次访问首页,它显示:暂时还没有发布的文章!好吧,做了这么多工作,但是数据库中其实还没有任何数据呀。下一节我们就实际写几篇文章保存到数据库里,看看显示的效果究竟如何。
blog真正的首页的更多相关文章
- Nginx基本配置备忘
		
原文:http://www.open-open.com/lib/view/open1482477873078.html Nginx 配置 在了解具体的Nginx配置项之前我们需要对于Nginx配置文件 ...
 - apache下配置虚拟主机案例详解
		
案例说明: 域名: www.tianyik.com /var/html/www blog.tianyik.com /var/html/blog bb ...
 - 英文汉语切换的导航栏,纯css制作。
		
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
 - Django+Bootstrap+Mysql 搭建个人博客(一)
		
1.1.环境搭建 (1)虚拟环境 mkvirtualenv website pip install django==1.11.7 (2)创建项目和app:website和blog (3)设置中文set ...
 - 使用nginx部署网站
		
前面的话 如果服务器只需要放置一个网站程序,解析网站到服务器的网站,网站程序监听80端口就可以了.如果服务器有很多应用,借助nginx不仅可以实现端口的代理,还可以实现负载均衡.本文将详细介绍前端及n ...
 - Nginx配置整理
		
不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...
 - SSH2 增删查改实例
		
(一)引入包 (共73个,不一定都需要,但是我的项目是这么多,经过调试,没有包冲突) (二)创建数据库表 建立数据库octtest,并创建user表,表里面一共4个字段:id,姓,名,年龄. 语句如下 ...
 - Nginx学习总结(5)——Nginx基本配置备忘
		
Nginx 配置 在了解具体的Nginx配置项之前我们需要对于Nginx配置文件的构成有所概念,一般来说,Nginx配置文件会由如下几个部分构成: # 全局块 ... # events块 events ...
 - 巧用 Img / JavaScript 采集页面数据
		
摘要: 当我们有一个新内容时(例如新功能.新活动.新游戏.新文章),作为运营人员总是迫不及待地希望能尽快传达到用户,因为这是获取用户的第一步.也是最重要的一步. 点此查看原文:http://click ...
 
随机推荐
- 给交换机端口设ip
			
先给端口设vlan,再给vlan设ip [H3C]vlan [H3C-vlan100]port GigabitEthernet // <H3C>sy System View: return ...
 - mysql使用mysqldump 与 mysqlimport进行数据库迁移
			
1.导入数据库 1)source source /home/platvt/product/pc2_create_tables.sql 2)mysqlimport 使用mysqlimport导入数据: ...
 - C/C++内存管理详解(转)
			
内存分配方式 简介 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动 ...
 - jenkins 构建一个前端web项目
			
Jenkins发布web前端代码 “系统管理”“管理插件”“已安装” 检查是否有“Git plugin”和“Publish Over SSH”两个插件,如果没有,则需点击“可选插件”,找到它并安装 ...
 - C语言重要概念汇总
			
作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...
 - java 设计模式 -- 责任链模式
			
设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...
 - java.lang.UnsupportedClassVersionError: Unsupported major.minor version 49.0的错误 [转]
			
一:要解决的问题 我们在尝鲜 JDK1.5 的时候,相信不少人遇到过 Unsupported major.minor version 49.0 错误,当时定会茫然不知所措.因为刚开始那会儿,网上与此相 ...
 - RethinkDB创始人教你怎样找到创业点子
			
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1YmFpdGlhbg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...
 - HTML经典标签用法
			
1.marquee属性的使用说明 <marquee> ... </marquee>移动属性的设置 ,这种移动不仅仅局限于文字,也可以应用于图片,表格等等 鼠标属性 onMo ...
 - gitHub静态页面托管
			
github已经是众所周知的程序员同性交友网站了,我就不多说了,(+_+)? 下面讲一讲如何在不用自己购买空间域名备案的情况下,通过github来托管自己的一些小demo或者项目 让其能够通过gith ...