网页项目的核心工作就是在后端从数据库查找数据,然后传递到网页前端进行展示。上一节我们打通了项目与网页模板的数据通路,本节将从数据库查询数据到传递到前端进行展示。
视图函数
首先是blog/views中,对index处理函数进行改写( 参考追梦人物老师博客)
def index(request):
post_list = Post.objects.all().order_by('-created_time')
return render(request,'blog/index.html', context={'post_list':post_list})使用数据模型Post从数据库查询所有博客数据,然后通过context传递到网页模板中。
静态文件
网页静态文件需要样式文件.css和脚本文件.js。
在blog文件夹下新建static文件夹,在其下新建blog文件夹,在其下新建css和js两个文件夹分别存放css样式文件和js脚本文件。目录结构为:
网页模板有许多网上资源可以参照。选择一套网页模板之后,替换掉之前的index.html模板并进行改造,得到templates/blog/index.html为
<!DOCTYPE html>
<html>
{% load static %}
<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' %}">
<!-- 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">
{% for post in post_list %}
<article class="post post-{{post.pk}}">
<header class="entry-header">
<h1 class="entry-title">
<a href="single.html">{{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.abstract}}</p>
<div class="read-more cl-effect-14">
<a href="#" 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>
</main>
<aside class="col-md-4">
<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>
其中
...
{% for post in post_list %}
<article class="post post-{{ post.pk }}">
...
</article>
{% empty %}
<div class="no-post">暂时还没有发布的文章!</div>
{% endfor %}
...为模板标签标识for循环遍历视图函数传入的post_list博客列表。
样式和数据渲染成功。
版权声明:本文为weixin_37881839原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。