django常用组件学习2——django-taggit
标签:django标签(tag)是比较新兴的一种信息管理方式,与经典的分类的区别在于:
- 同一篇文章标签(Tag)可以用多个,但通常只能属于一个分类;
- 标签(Tag)一般是在写作完成后,根据文章大意进行添加的;
- 标签(Tag)可以把文章中重点词语提炼出来,有关键词的意义,但是分类没有;
- 标签(Tag)通常反映了您的主要关注点,比如财经、互联网、体育等等;
- 标签(Tag)给了我们一条联系他人的纽带,通过标签(Tag)可以找到您的“同好”。
现在很多网站,论坛,博客和软件都是支持标签(TAG)的那么我们怎么用django实现标签(TAG)功能呢,今天我就来学习一下django-taggit组件。
组件的github主页为https://github.com/alex/django-taggit
基本使用方式:
我们按官方文档来练习. 安装
一般不会有什么问题。 第二步,在项目中使用,我想在前面我学习django-filter的项目里,按照文档“Add “taggit” to your project’s INSTALLED_APPS setting.” 结果项目启动时报错。
这里因为还需要把“django.contrib.contenttypes”加入到 “INSTALLED_APPS” 中。 然后运行manage.py syncdb 会生成表【TAGGIT_TAG】和【TAGGIT_TAGGEDITEM】。我们可以查看一下这两个表的结构:
下面我们来修改模型:
在命令行测试一下:
结合ModelForm使用:
使用forms接回request参数时会把输入的标签参数进行智能的分隔处理,分隔规则如下表。
Tag input string | Resulting tags | Notes |
---|---|---|
apple ball cat | ["apple", "ball", "cat"] |
No commas, so space delimited |
apple, ball cat | ["apple", "ball cat"] |
Comma present, so comma delimited |
“apple, ball” cat dog | ["apple, ball", "cat", "dog"] |
All commas are quoted, so space delimited |
“apple, ball”, cat dog | ["apple, ball", "cat dog"] |
Contains an unquoted comma, so comma delimited |
apple “ball cat” dog | ["apple", "ball cat", "dog"] |
No commas, so space delimited |
“apple” “ball dog | ["apple", "ball", "dog"] |
Unclosed double quote is ignored |
注意:当“commit=False”时,需要用“save_m2m()”方法保存多对多关系数据,如下:
其他:
- 默认使用【TAGGIT_TAG】和【TAGGIT_TAGGEDITEM】表保存标签及与记录的关联关系数据,但是我们可以通过继承TaggedItemBase来自定义模型来保存相关数据。 参考 custom_tagging
- 实际应用中我们需要在前端实时提示现有的标签及使用情况,可以参与项目django-taggit-suggest及项目django-taggit-templatetags以及文章Suggesting tags with django-taggit and jQuery UI
Written on 2015-06-10