2.1.博客首页设计

(1)settings.py

MEDIA_ROOT = os.path.join(BASE_DIR,'media').replace("//","/")
MEDIA_URL = '/media/'

(2)website/urls

添加图片的url

from django.conf.urls import url,include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/',include('blog.urls') ), ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT ) #添加图片的url

(3)blog/models.py

添加两个方法

class Entry(models.Model):
.
.
.
def get_absolute_url(self):
#获取当前博客详情页的url
return reverse("blog:blog_detail",kwargs={"blog_id":self.id}) #app名字,详情页url的别名,参数是当前博客的id def increase_visiting(self):
#访问量加1
self.visiting += 1
self.save(update_fields=['visiting']) #只保存某个字段

(4)views.py

from django.shortcuts import render
from . import models def index(request):
entries = models.Entry.objects.all() return render(request,'blog/index.html',locals()) def detail(request,blog_id):
entry = models.Entry.objects.get(id=blog_id)
entry.increase_visiting() return render(request,'blog/detail.html',locals())

(5)index.py

{% extends 'blog/base.html' %}

{% block title %}博客首页{% endblock %}

{% block content %}

    <div class="container">
<div class="row">
<div class="col-md-9">
{% for entry in entries %}
<h2><a href="{{ entry.get_absolute_url }}">{{ entry.title }}</a></h2> <br>
{% if entry.img %}
<img src="{{ entry.img.url }}" width="60%" height="270px"/>
{% endif %}
{% if entry.abstract %}
<p>{{ entry.abstract }}</p>
{% else %}
<p>{{ entry.body|truncatechars:180 }}</p>
{% endif %}
<p>
<span>作者:{{ entry.author }}</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;发布时间:{{ entry.created_time }}</span>
<span>&nbsp;&nbsp;&nbsp;&nbsp;阅读数:{{ entry.visiting }}</span>
</p>
{% endfor %} </div> </div> </div> {% endblock %}

(6)detail.html

{% extends 'blog/base.html' %}

{% block title %}博客详情页{% endblock %}

{% block content %}
博客{{ blog_id }}的详情页
{% endblock %}

2.2.博客详情页面

detail.html

{% extends 'blog/base.html' %}

{% block title %}博客详情页{% endblock %}

{% block content %}
<div class="container">
<div class="row">
<div class="col-md-9">
<h1>{{ entry.title }}</h1>
<p>
<strong>{{ entry.author }}</strong>
&nbsp;&nbsp;&nbsp;&nbsp;{{ entry.created_time|date:'Y年m月d日' }}
&nbsp;&nbsp;&nbsp;&nbsp;分类:
{% for category in entry.category.all %}
&nbsp;&nbsp;<a href="#">{{ category.name }}</a>
{% endfor %} &nbsp;&nbsp;&nbsp;&nbsp;标签:
{% for tag in entry.tags.all %}
&nbsp;&nbsp;<a href="#">{{ tag.name }}</a>
{% endfor %} &nbsp;&nbsp;&nbsp;&nbsp;浏览量:
&nbsp;&nbsp;{{ entry.visiting }} {% if entry.img %}
<img src="{{ entry.img.url }}" width="60%" height="270px"/>
{% endif %}
<hr />
<p>
{{ entry.body }}
</p>
</p>
</div>
</div>
</div> {% endblock %}

2.3.Markdown排版、语法高亮和生成目录

(1)安装模块

pip install markdown

pip install pygments

(2)views.py

import markdown,pygments

def detail(request,blog_id):
entry = models.Entry.objects.get(id=blog_id)
md = markdown.Markdown(extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
entry.body = md.convert(entry.body)
entry.toc = md.toc
entry.increase_visiting() return render(request,'blog/detail.html',locals())

(3)detail.html

把github.css放到blog/css里面,detail.html引用样式

{% extends 'blog/base.html' %}
{% load staticfiles %} {% block title %}博客详情页{% endblock %}
{% block css %}
<link rel="stylesheet" href="{% static 'blog/css/github.css' %}">
{% endblock %}

标签和正文都加salf

(4)后台添加博客

Markdown语法测试篇

## 1.python语言介绍
编程语言主要从以下几个角度进行分类:编译型,静态型,动态性,强类型定义语言和弱类型定义语言 - 编译型:有一个负责翻译的程序来对我们的源代码进行转换,生成对应的可执行代码,这个过程就是编译(Compile),而负责编译的程序就被称为编译器(Compiler) - 通常我们所说的动态语言,静态语言是指动态类型语言和静态类型语言 ## 2.python的优缺点 - 优点:简单、开发效率高、高级语言、可移植性、可扩展性、可嵌入性 - 缺点:速度慢,但是相对的、代码不能加密、线程不能利用多CPU问题 ## 3.高阶函数
```python
def func():
print('in the func')
return foo()
def foo():
print('in the foo()')
return 666 res = func()
print(res)
```

前端显示效果:

Django+Bootstrap+Mysql 搭建个人博客(二)的更多相关文章

  1. Django+Bootstrap+Mysql 搭建个人博客(一)

    1.1.环境搭建 (1)虚拟环境 mkvirtualenv website pip install django==1.11.7 (2)创建项目和app:website和blog (3)设置中文set ...

  2. Django+Bootstrap+Mysql 搭建个人博客(五)

    5.1.自定义403,404和500页面 (1)website/urls.py from blog import views as blog_views handler403 = blog_views ...

  3. Django+Bootstrap+Mysql 搭建个人博客(四)

    4.1.博客分类 (1)blog_tags.py @register.simple_tag def get_categories(): return Category.objects.all() @r ...

  4. Django+Bootstrap+Mysql 搭建个人博客(三)

    3.1.分页功能 (1)views.py from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger def make ...

  5. Django+Bootstrap+Mysql 搭建个人博客(六)

    6.1.comments插件 (1)安装 pip install django-contrib-comments (02)settings INSTALLED_APPS = [ 'django.con ...

  6. Django+Bootstrap+Mysql 搭建个人博客 (六)

    6.1.comments插件 (1)安装 pip install django-contrib-comments (02)settings INSTALLED_APPS = [ 'django.con ...

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

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

  8. django入门--django-blog-zinnia搭建个人博客

    1.安装python 选择合适python2.7及以上版本安装https://www.python.org/downloads/ 2.建立虚拟环境 这不是必须的,但是建议使用,为每个项目单独引入依赖, ...

  9. Django两天搭建个人博客

    传送门:https://github.com/1417766861/django-blog(可直接运行,上面有步骤) 效果: 首页: 侧栏: 详情页面: 修改头像,资料,文章发布: 支持添加标签拖拽 ...

随机推荐

  1. tensorflow分类-【老鱼学tensorflow】

    前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题. 但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗.某篇文章的内容是属于体育新闻还是 ...

  2. js判断是微信、QQ内置浏览器打开页面

    var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="micromessenger&quo ...

  3. Kafka提交offset机制

    在kafka的消费者中,有一个非常关键的机制,那就是offset机制.它使得Kafka在消费的过程中即使挂了或者引发再均衡问题重新分配Partation,当下次重新恢复消费时仍然可以知道从哪里开始消费 ...

  4. 第二项目AIaisell(易销宝)

    一.什么是报表 向上级报告情况的表格.简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:“报表 = 多样的格式 + 动态的数据” 表格:详细数据 图表: 直观 二.表格数据展示 2 ...

  5. 【Java并发编程二】Java并发包

    1.Java容器 1.1.同步容器 Vector ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时 ...

  6. iperf3 使用

    iperf 分client 和 server server:   iperf3 -s -p 5000 -i 1 client: iperf3 -c 192.168.31.11 -p 5000 Serv ...

  7. 基本排序算法(Java)

    基本排序算法 (Java) 经过几次笔试,发现自己的Java基础有些薄弱,基本的排序算法掌握的还不够熟练,需要多加学习总结. 1. 选择排序 思想: 给定一个整数数组,例 int[] a ={38,6 ...

  8. react 的进阶

    一 react 中table报错 validateDOMNesting(...): <tr> cannot appear as a child of <table>. See ...

  9. css实现中文换行,英文换行,超出省略

    英文换行时,是以单词换行,在对应的标签添加对应的属性即可 1 word-break:break-all;只对英文起作用,以字母作为换行依据 2 word-wrap:break-word; 只对英文起作 ...

  10. c# 集合的长度为什么是可变的

    摘要: 写在前面:此随笔仅仅是作为个人学习总结,有不对的地方,请各位前辈指正O(∩_∩)O........ 一: 引入 在学习集合之前我们都学习过数组.可以知道数组的长度在声明的时候就已经被固定了,不 ...