zoukankan      html  css  js  c++  java
  • 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/ 。 你会看到每一个帖子的标题下面的标签列表:

  • 相关阅读:
    Python中CreateCompatibleDC和CreateBitmap造成的内存泄漏
    POJ 2420 模拟退火
    LR(1)分析表-语法树-四元式
    C语言文法
    计蒜客 18018 热爱工作的蒜蒜 最短路+dp
    HDU 5988 最小费用流
    POJ 1808 平方剩余
    POJ 2115 单变元模线性方程
    计蒜客 17414 Exponial 指数降幂公式
    计蒜客 17412 Card Hand Sorting 最长公共子序列
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8525645.html
Copyright © 2011-2022 走看看