利用Django实现的功能如下:

  • 博客列表显示
  • 博客详情页显示
  • 博客标签显示

具体实现过程如下:

1.在settings修改模板默认的位置:

TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates',# 'DIRS': [],#相对位置好处在于避免文件夹移动和系统linux或windows改变带来的影响。'DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]

2.添加模板:

base.html:
{% load staticfiles %}
{% load blog_tags %}
<!DOCTYPE html>
<html>
<head><title>Black &amp; 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> &amp; 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="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>{% 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><div class="widget widget-archives"><h3 class="widget-title">归档</h3>{% archives as date_list %}<ul>{% for date in date_list %}<li><a href="{% url 'blog:archives' date.year date.month %}">{{ date.year }}年 {{ date.month }} 月</a></li>{% empty %}暂无归档!{% endfor %}</ul></div><div class="widget widget-category"><h3 class="widget-title">分类</h3>{% get_categories as category_list %}<ul>{% for category in category_list %}<li><a href="#">{{ category.name }} <span
                                        class="post-count">(13)</span></a></li>{% empty %}暂无分类!{% endfor %}</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">&copy 2017 </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>
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 %}
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 %}

3.添加注册模板:

{%block title%}登录页面{%endblock%}{%block content%}<h2>登录页面</h2><form method='post'>{% csrf_token%}{{form.as_p}}<button type='submit'>登录</button></form>
{%endblock%}

4.在post模型中添加获取url的方法:

class Post(models.Model):...def get_absolute_url(self):#blog是url中的命名空间。return reverse('blog:detail' ,kwargs={'pk':self.pk})

5.urls.py中添加命名空间和相关的url:

from django.conf.urls import url
from blog import viewsapp_name='blog'urlpatterns = [url(r'^$', views.index, name='index'),url(r'^(?P<pk>[0-9]+)/$', views.detail, name='detail'),url(r'^archives/(?P<year>[0-9]{4})/(?P<month>[0-9]{1,2})/$', views.archives, name='archives'),]

6.views.py中添加相关的视图函数:

from django.shortcuts import render,get_object_or_404# Create your views here.
from django.http import HttpResponse
from .models import Post
import markdown...
def detail(request, pk):post = get_object_or_404(Post, pk=pk)post.views += 1post.save()post.body = markdown.markdown(post.body,extensions=['markdown.extensions.extra','markdown.extensions.codehilite','markdown.extensions.toc'],)return render(request,'blog/detail.html', context={'post':post})def archives(request, year, month):post_list = Post.objects.filter(created_time__year=year,created_time__month=month).order_by('-created_time')return render(request, 'blog/index.html', context={'post_list':post_list})def category(request, pk):post_list = Post.objects.filter(category_id=pk).order_by('-created_time')return render(request, 'blog/index.html', context={'post_list':post_list})

7.主urls中添加用户登录登出的功能:

from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^', include('blog.urls')),url(r'^login/$', auth_views.login, name='login'),url(r'^logout/$', auth_views.logout, name='logout'),]

8.在blog.templatetags中添加blog_tags.py:

生成自定义的模板标签,并注册模板标签。

from django import template
from ..models import Post, Categoryregister = template.Library()@register.simple_tag
def get_recent_posts(num=5):return Post.objects.all().order_by('-created_time')[:num]@register.simple_tag
def archives():return Post.objects.dates('created_time', 'month', order='DESC')@register.simple_tag
def get_categories():return Category.objects.all()

Django的博客项目创建(3)相关推荐

  1. Django day17 博客项目(一)

    一: 博客项目需求分析 首页(显示文章) 文章详情 点赞, 点踩 文章评论 字评论 评论的展示 登录功能(图片验证码) 注册功能(基于form验证,ajax) 个人站点(不同人不同样式,文章过滤) 后 ...

  2. Django之BBS博客项目

    一.登陆功能(验证码) 1 from geetest importGeetestLib2 from django.contrib importauth3 4 #使用极验滑动验证码的登陆 5 deflo ...

  3. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

  4. 基于Django的博客BBS项目

    基于Django的博客BBS项目 项目流程内容概要 第一部分 第二部分 第三部分 第四部分 项目具体流程 1.数据库表创建及同步 1.1创建项目 1.2创建数据库 1.3修改配置文件与__init__ ...

  5. 利用django+pycharm开发小型博客项目!!!

    废话不多说,让我王虎剩大将军带领大家利用djang框架开发一个小型的博客项目吧!! 首先,此教程适合的人群为,懂得创建python的虚拟环境,以及拥有少数web前端开发的经验,并且拥有少数的后端编程经 ...

  6. 用 Flask 来写个轻博客 (1) — 创建项目

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前言 扩展阅读 部署开发环境 创建 Github 项目 前言 一步一步的实现一个 ...

  7. 基于Django的博客系统

    代码地址如下: http://www.demodashi.com/demo/14445.html 基于django的博客系统, 界面展示 首页前端界面如下: 文章页面: 后台页面: 文章页面: ##项 ...

  8. python搭建博客项目思路_Django项目——Blog简易开发入门

    一.模型层 模型层是什么 位于视图与数据库之间 pytho对象与数据库表的转换 为什么需要模型层 屏蔽不同数据库之间的差异 开发者更加专注于业务逻辑的开发 提供多种便捷的工具有利于开发工作 模型层的配 ...

  9. Django 系列博客(二)

    Django 系列博客(二) 前言 今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳. 命令行搭建 Django 项目 创建纯净虚拟环境 在上一篇博客 ...

最新文章

  1. 关于curl: (2) Failed Initialization
  2. dojo.publish 和 dojo.subscribe
  3. 内存中发堆和栈,栈是运行时的单位,而堆是存储的单位
  4. tkinter显示mysql表_Python(Tkinter)如何只显示Mysql记录而不显示列表?
  5. socket 远程主机强迫关闭了一个现有的连接_Python 之 后门程序编写与远程控制
  6. 约瑟夫环c语言代码顺序存储,详解约瑟夫环问题及其相关的C语言算法实现
  7. 中国大陆收货地址智能解析API
  8. 2018年中国互联网企业百强榜单揭晓
  9. 宏观经济学通识课-读书笔记
  10. 思科路由器配置命令(三)
  11. video.js插件的使用
  12. Quartus prime工程中各种文件的后缀及意义
  13. LBM学习记录4 Python实现D3Q19圆柱绕流
  14. 【3dsmax插件】FBX转Bip插件 Bippy.ms
  15. 计算机控制面板设置命令,控制面板在哪?控制面板命令,5种控制面板快速打开法...
  16. Siebel应用数据结构层次
  17. diamond源码解析
  18. python turtle笛卡尔心形线_用MATLAB实现心形线
  19. 疫情当下,选择代理加盟互联网广告项目的优势
  20. Model Adaption: Unsupervised Domain Adaption Without Source Data

热门文章

  1. 如何实现PLC远程编程调试上下载更改程序
  2. 使用Yalmip+matlab求解主从博弈(双层规划)问题 | 教程(二)
  3. 携程反爬中的Eleven参数-反爬与反反爬的奇技淫巧
  4. 广西玉林2021年高考成绩查询,2021年广西高考县中实力榜 玉林中学超群
  5. 【Adobe Illustrator 教程】2. 认识矩形工具并绘制一些马赛克图案
  6. python traceback对象_Traceback具体使用方法
  7. VScode代码格式化解决方案c/c++
  8. java怎么加工具栏_Java入门-考无忧教你添加工具栏
  9. mysql: [MY-010055] [Server] IP address ‘10.237.0.196‘ could not be resolved
  10. Word键入自动将单双引号修改为弯引号(‘‘或““)