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/ 。 你会看到每一个帖子的标题下面的标签列表:

  • 相关阅读:
    一个简单的knockout.js 和easyui的绑定
    knockoutjs + easyui.treegrid 可编辑的自定义绑定插件
    Knockout自定义绑定my97datepicker
    去除小数后多余的0
    Windows Azure Web Site (15) 取消Azure Web Site默认的IIS ARR
    Azure ARM (1) UI初探
    Azure Redis Cache (3) 创建和使用P级别的Redis Cache
    Windows Azure HandBook (7) 基于Azure Web App的企业官网改造
    Windows Azure Storage (23) 计算Azure VHD实际使用容量
    Windows Azure Virtual Network (11) 创建VNet-to-VNet的连接
  • 原文地址:https://www.cnblogs.com/zhanghongfeng/p/8525645.html
Copyright © 2011-2022 走看看