Django 博客
来源:互联网 发布:阿里的大数据应用 编辑:程序博客网 时间:2024/06/07 15:10
编写视图
这里是使用的是基于类的视图,由于要详情页展示的是Post的内容,所以需要继承DetailView
from django.views.generic import DetailViewclass PostView(DetailView): model = Post context_object_name = 'post' template_name = 'blog/detail.html'
编写模板文件
在blog/templates/blog
目录,新建一个detail.html
,内容如下
{% extends 'blog/base.html' %}{% block body %} <div class="uk-container"> <article class="uk-article"> <h1 class="uk-article-title">{{ post.title }}</h1> <p class="uk-article-meta">Written by {{ post.author.username }} on {{ post.created_time }}, {{ post.views }}views</p> <p>{{ post.body }}</p> </article> </div>{% endblock %}
配置url
在blog
路径下修改urls.py
文件
urlpatterns = [ ... url(r'^(?P<pk>[0-9]+)/$', views.PostView.as_view(), name='detail'),]
url函数第一个参数,是一个正则表达式,这里是r'^(?P<pk>[0-9]+)/$'
,所以会匹配http://127.0.0.1:8000/blog/123
类似的url,其中123
就是pk参数,也就是Post
的主键,传给视图函数用来查询对应的Post
为了方便,给Post
模型添加get_absolute_url
方法,可以在模板文件里直接通过post.get_absolute_url
来获取url
在blog/models.py
的Post
模型里添加
from django.urls import reversedef get_absolute_url(self): return reverse('blog:detail', kwargs={'pk': self.pk})
再将blog/templates/blog/index.html
做如下修改
- <a class="uk-button uk-button-text" href="#">Read more</a>+ <a class="uk-button uk-button-text" href="{{ post.get_absolute_url }}">Read more</a>
这样就可以点击Read more
,跳转到详情页面了
添加markdown语法支持
当前的详情页博客内容只是纯文本,没有任何格式,不美观也无法添加格式
因此可以用markdown语法编写博客,再通过python的markdown将博客内容转换成HTML格式,将转换后的文本直接显示出来
首先安装markdown
pip3 install Markdown
再安装Pygments
,用于代码语法高亮 pip3 install Pygments
生成语法高亮的样式表 pygmentize -S default -f html -a .codehilite > code.css
创建blog/static/blog/css/highlights/
目录
将code.css
放到blog/static/blog/css/highlights/code.css
markdown的详细用法可以查看Markdown官方文档
修改PostView
,覆写get_object
方法
import markdowndef get_object(self, queryset=None): #获取当前的post post = super(PostView, self).get_object(queryset) #创建markdown,extensions指定扩展,markdown.extensions.codehilite扩展是用来高亮代码的 md = markdown.Markdown(extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', ]) #将博客内容转换成html格式 post.body = md.convert(post.body) return post
修改模板,主要是引入code.css
文件,并且不对post.body
进行转义,通过添加safe
过滤器来完成
{% extends 'blog/base.html' %}+{% block title %}{{ post.title }}{% endblock %}+{% block beforehead %}+ {% load static %}+ <link rel="stylesheet" type="text/css" href="{% static 'blog/css/highlights/code.css' %}" />+{% endblock %} {% block body %} <div class="uk-container"> <article class="uk-article"> <h1 class="uk-article-title">{{ post.title }}</h1> <p class="uk-article-meta">Written by {{ post.author.username }}- on {{ post.created_time }}, {{ post.views }}views</p>- <p>{{ post.body }}</p>+ on {{ post.created_time }}, {{ post.views }} views</p>+ {{ post.body|safe }} </article> </div> {% endblock %}
可以在后台管理里添加一篇makedown语法的文章进行测试
# IntroGo ahead, play around with the editor! Be sure to check out **bold** and *italic* styling, or even [links](https://google.com). You can type the Markdown syntax, use the toolbar, or use shortcuts like `cmd-b` or `ctrl-b`.## ListsUnordered lists can be started using the toolbar or by typing `* `, `- `, or `+ `. Ordered lists can be started by typing `1. `.#### Unordered* Lists are a piece of cake* They even auto continue as you type* A double enter will end them* Tabs and shift-tabs work too#### Ordered1. Numbered lists...2. ...work too!## What about images?![Yes](https://i.imgur.com/sZlktY7.png)## What about code?```pythondef get_object(self, queryset=None): post = super(PostView, self).get_object(queryset) md = markdown.Markdown(extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', ]) post.body = md.convert(post.body) return post```
本文相关源码
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django 博客
- Django--博客
- django搭建简易博客
- django创建博客
- django 博客一
- django博客二
- django博客三
- django博客四
- Zinnia - Django 博客框架
- 随机生成数的方法
- 从零开始开发Android版2048 (九)
- lintcode刷题--生成括号
- 怎么在矩阵中挑选符合条件的数据
- 持续集成测试(1) -- docker-maven-plugin初探
- Django 博客
- JDK源码学习之集合框架HashMap
- windows下的批量重命名
- 选择排序,冒泡排序,插入排序的小小记录
- 在Action中使用Servlet API
- MongoDB基础使用(一)
- koa2后端热更新
- yum安装的docker的卸载
- 学习GitHub