一般在发表博客后会给每个帖子加上一个标签。类似帖子关键字的功能。在这一章中来看下如何给博客添加标签功能(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之博客系统:增加标签的更多相关文章

  1. Django练习——博客系统小试

    在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...

  2. 纯django开发博客系统

    企业级教程:纯django开发博客系统 1.视频教程 https://www.duanshuilu.com/ 2.教程文档 https://www.duanshuilu.com/ 0.课程简介1.简价 ...

  3. Django(博客系统):基于pycharm如何一个django工程下创建多个app

    背景:通常我们创建一个django系统时,为了把业务模块划分清楚往往会把一个独立的业务模块放到一个app中,如果多个独立的业务模块就会创建多个app,一般情况下为了更好的管理这些app,会把他们都存放 ...

  4. Django之博客系统搭建一

    前面已经介绍了django的各种用法,从这一章开始,将实际搭建一个blog系统. 首先我们需要设计blog的模型,在models.py中添加如下内容 # -*- coding: utf-8 -*- f ...

  5. 【django之博客系统开发】

    一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...

  6. Django之博客系统邮件分享博客

    在上一章中,我们创建了一个基础的博客应用,我们能在http://127.0.0.1:8000/blog/显示我们的博客.在这一章我们将尝试给博客系统添加一些高级的特性,比如通过email来分享帖子,添 ...

  7. Django之博客系统:增加评论

    3既然是博客,那肯定就有留言评论系统.在这一章就来建立一个评论系统. 1 创建一个模型来保存评论 2 创建一个表单来提交评论并且验证输入的数据 3 添加一个视图函数来处理表单和保存新的评论到数据库 4 ...

  8. Django之博客系统:自定义模板标签

    Django提供了很多内置的模板标签比如{% if %}或者{% block %}Django也允许你创建自己的模板标签(template tags)来执行自定义的动作.当你需要在你的模板中添加功能而 ...

  9. Django之博客系统:用户登陆

    使用django有一个好处就是有各种各样的框架可以拿来直接使用.相比flask,django自带的框架确实要多很多.比如这一章就要介绍的用户登录.Django拥有一个内置的认证(authenticat ...

随机推荐

  1. 使用ajax技术实现简单登录操作

    1.ajax:特点在web上面通过JavaScript,使用异步的XmlHttp请求,实现无刷新的Web界面 首先:创建ajax对象 再次:向服务器端实现ajax请求 最后:回调 创建异步请求对象 & ...

  2. 蓝桥杯 算法训练 ALGO-149 5-2求指数

     算法训练 5-2求指数   时间限制:1.0s   内存限制:256.0MB 问题描述 已知n和m,打印n^1,n^2,...,n^m.要求用静态变量实现.n^m表示n的m次方.已知n和m,打印n^ ...

  3. [转] CentOS系统目录学习

    最近初学Linux 对linux的目录产生了很多疑问,看到这篇文章,让我顿时对目录有了一个清晰的认识!推荐给大家! ------------------------------------------ ...

  4. linux下mysql配置文件my.cnf最详细解释

    MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于/etc/my.cnf. 可以查找下:find / -name my.cnf m ...

  5. 用nfs挂载内核时出错 ERROR: Cannot umount的解决办法

    SMDK2440 # nfs 30000000 192.168.1.106:/work/nfs_root/uImage                         ERROR: resetting ...

  6. C# IL中间代码注入实现切面编程

    背景及现状:之前分享的那篇“面向切面编程–渲染监控日志记录方案”中提供了利用RealProxy作为代理类来生成代理的面向切面的编程方法,那个方法可以实现面向切面编程进行日志记录,现在渲染主程序也是采用 ...

  7. Celery-4.1 用户指南: Signals (信号)

    基础 有多种类型的事件可以触发信号,你可以连接到这些信号,使得在他们触发的时候执行操作. 连接到 after_task_publish 信号的示例: from celery.signals impor ...

  8. c++如何编写线程安全的DLL

    DLL有个共同的特点就是都有一个初始化函数,一个资源释放函数,其他几个函数都是核心功能函数.而且这些DLL有时会被多个进程同时调用,这就牵扯到多进程的多线程调用DLL的问题.有点绕口,以下我根据我实践 ...

  9. windows中git输错密码后不能重新输入的问题

    当输入密码错误后,git会把密码保存在windows的你的当前用户名的缓存中. 我们可以在控制面板中寻找到这个缓存,再删掉就可以了. 首先,打开“控制面板”,把“查看方式”改为“大图标”,再打开“用户 ...

  10. Tiny4412 Linux 内核配置流程

    1.配置交叉编译器 默认情况下,内核构建的是与宿主机相同的体系架构镜像.如果要交叉编译,需要设置两个变量ARCH和CORSS_COMPILE. ①ARCH:指明目标体系架构,如x86.arm.mips ...