Django之博客系统:增加标签
一般在发表博客后会给每个帖子加上一个标签。类似帖子关键字的功能。在这一章中来看下如何给博客添加标签功能(tagging)
添加标签需要集成第三方的Django标签应用来完成这个功能。django-taggit是一个可复用的应用,它会提供给你一个Tag模型(model)和一个管理器(manager)来方便的给任何模型(model)添加标签
安装好后,首先在setting.py中引用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'taggit',
]
打开你的blog应用下的model.py文件,给Post模型(model)添加django-taggit提供的TaggableManager管理器(manager),使用如下代码:这个tags管理器(manager)允许你给Post对象添加,获取以及移除标签
from taggit.managers import TaggableManager
class Post(models.Model):
tags=TaggableManager()
class Meta:
ordering=('-publish',)
def __str__(self):
return self.title
既然修改了模型,那么就需要同步数据库进行迁移。
zhf@zhf-maple:~/py_prj/mysite$ python manage.py makemigrations
Migrations for 'blog':
blog/migrations/0004_post_tags.py
- Add field tags to post
zhf@zhf-maple:~/py_prj/mysite$ python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions, taggit
Running migrations:
Applying taggit.0001_initial... OK
Applying taggit.0002_auto_20150616_2121... OK
Applying blog.0004_post_tags... OK
然后我们在命令行来测试下是否可用。打开终端运行命令python manage.py shell
In [1]: from blog.models import Post
#取得Post模型并进行tag添加
In [2]: post=Post.objects.get(id=1)
In [4]: post.tags.add('java','c++','python')
#显示所有的tag
In [5]: post.tags.all()
Out[5]: <QuerySet [<Tag: python>, <Tag: java>, <Tag: c++>]>
#移除其中一个tag
In [6]: post.tags.remove('c++')
In [7]: post.tags.all()
Out[7]: <QuerySet [<Tag: python>, <Tag: java>]>
接下来运行服务器。来到后台查看下。可以看到新增了标签页面

点击进去可以看到我们添加的标签

此外我们进入具体的帖子
http://127.0.0.1:8000/admin/blog/post/ 也可以对标签进行编辑

接下来我们要做的就是在模板中将这些标签给显示出来。
在list.html中添加如下来显示标签
<p class="tags">标签:{{ p.tags.all|join:"," }}</p>
join模板(template)过滤器(filter)的功能类似python字符串的join()方法,将给定的字符串连接起来。在浏览器中打开 http://127.0.0.1:8000/blog/ 。 你会看到每一个帖子的标题下面的标签列表:

Django之博客系统:增加标签的更多相关文章
- Django练习——博客系统小试
在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...
- 纯django开发博客系统
企业级教程:纯django开发博客系统 1.视频教程 https://www.duanshuilu.com/ 2.教程文档 https://www.duanshuilu.com/ 0.课程简介1.简价 ...
- Django(博客系统):基于pycharm如何一个django工程下创建多个app
背景:通常我们创建一个django系统时,为了把业务模块划分清楚往往会把一个独立的业务模块放到一个app中,如果多个独立的业务模块就会创建多个app,一般情况下为了更好的管理这些app,会把他们都存放 ...
- Django之博客系统搭建一
前面已经介绍了django的各种用法,从这一章开始,将实际搭建一个blog系统. 首先我们需要设计blog的模型,在models.py中添加如下内容 # -*- coding: utf-8 -*- f ...
- 【django之博客系统开发】
一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...
- Django之博客系统邮件分享博客
在上一章中,我们创建了一个基础的博客应用,我们能在http://127.0.0.1:8000/blog/显示我们的博客.在这一章我们将尝试给博客系统添加一些高级的特性,比如通过email来分享帖子,添 ...
- Django之博客系统:增加评论
3既然是博客,那肯定就有留言评论系统.在这一章就来建立一个评论系统. 1 创建一个模型来保存评论 2 创建一个表单来提交评论并且验证输入的数据 3 添加一个视图函数来处理表单和保存新的评论到数据库 4 ...
- Django之博客系统:自定义模板标签
Django提供了很多内置的模板标签比如{% if %}或者{% block %}Django也允许你创建自己的模板标签(template tags)来执行自定义的动作.当你需要在你的模板中添加功能而 ...
- Django之博客系统:用户登陆
使用django有一个好处就是有各种各样的框架可以拿来直接使用.相比flask,django自带的框架确实要多很多.比如这一章就要介绍的用户登录.Django拥有一个内置的认证(authenticat ...
随机推荐
- iperf 网络测速
1.介绍 1) # ipref -g //这个最直观 2)Iperf 是一个网络性能测试工具.Iperf可以测试最大TCP和UDP带宽性能.Iperf具有多种参数和UDP特性,可以根据需要调整. ...
- Day3(1)linux文件系统及文件类型
Linux的文件系统 根文件系统(rootfs) root filesystem LSB,FHS:(FileSystem Heirache Standard) /etc,/usr,/var,/root ...
- 一个WCF使用TCP协议进行通协的例子
在解决方案资源管理器中,需要添加两个引用:System.ServiceModel和WCFService.然后双击窗口,在Form_Load事件中编写如下代码: 添加一个应用程序配置文件App.Conf ...
- 第 十五 课 Go 语言范围(Range)
Go 语言中 range 关键字用于 for 循环中迭代数组(array).切片(slice).通道(channel)或集合(map)的元素 package main import "fmt ...
- I/O---读取txt文件----demo
首先获得一个文件句柄.File file = new File(); file即为文件句柄. 读取甲方的信息:new FileInputStream(file) 目前这个信息已经读进来内存当中了.接下 ...
- 如何删除offline数据文件/表空间上的分区
接上一篇"Oracle 10g RAC全库flashback " http://www.cnblogs.com/cqubityj/p/3265552.html 在打开数据库之前把2 ...
- 类型:Oracle;问题:oracle 查询表详细信息;结果:oracle查询表信息(索引,外键,列等)
oracle查询表信息(索引,外键,列等) oracle中查询表的信息,包括表名,字段名,字段类型,主键,外键唯一性约束信息,索引信息查询SQL如下,希望对大家有所帮助: 1.查询出所有的用户表sel ...
- Hbase批量插入优化记录
2016年5月11日10:08:29 hbase原本的put方式是一条一条的put,在客户端修改 AutoFlush 将HTable的setAutoFlush设为false,可以支持客户端批量更新.即 ...
- Emulator 模拟器起不来
内存过大 打开SDK Manager.Avd Manager 新建 adb 命令不识别,因为环境变量里没有加入platform-tools文件夹 下载并按照下面这个更新,会帮助还原VS2012,我这 ...
- javascript的概述
JavaScript是怎么诞生的???刚开始的是为了验证表单而开发出来的. 什么是JavaScript???a.面向对象的编程语言b.解释性的编程语言(说白了就是不用编译的一种语言)c.脚本语言(说白 ...