网站搭建 (第19天) 标签功能

一、前言

  在逛开源中国社区的时候,发现每一篇博客下面都有一行文章的标签,大概就是文章中的代码类型以及使用到的模块之类的。如下图,我的开源中国社区地址是:https://my.oschina.net/zhenfei,用了一段时间后废弃了,转到了博客园,所以上面的文章是不全的。

  转而想到自己的网站,我也想添加一个这样的功能。那么在Django中,非常轻松地就能通过ManyToManyField字段来将文章与标签相互关联。先看一个官方文档的例子来说明下:

@python_2_unicode_compatibleclass Publication(models.Model):
    title = models.CharField(max_length=30) 

    def __str__(self):
        return self.title

@python_2_unicode_compatibleclass Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication, related_name=‘publications_article‘)    

    def __str__(self):
        return self.headline

  使用shell简单地演示一下:

# 创建出版商
In [4]: p1 = Publication.objects.create(title=‘hello‘)

# 创建文章
In [5]: a1 = Article.objects.create(headline=‘django‘)

# 此时出版商和文章还没有对应添加到 publication_article 表中,获取为空
In [6]: p1.publications_article.all()
Out[6]: <QuerySet []>

In [7]: p1.publications_article.add(a1)

# 获取此出版商出版的文章
In [8]: p1.publications_article.all()
Out[8]: <QuerySet [<Article: django>]>

# 获取出版此文章的出版商
In [9]: a1.publications.all()
Out[9]: <QuerySet [<Publication: hello>]>

  下面就开始在自己网站中实现这一功能。

二、开发流程

1.新建Tag模型类

from django.db import models

class Tag(models.Model):
    """
    标签 Tag 也比较简单,和 Category 一样。
    再次强调一定要继承 models.Model 类!
    """
    name = models.CharField(max_length=100, verbose_name=u‘标签‘)

    class Meta:
        verbose_name = ‘标签‘
        verbose_name_plural = ‘标签‘

    def __str__(self):

        return self.name

2.通过ManyToManyField将文章与标签关联

  在文章Post模型类中,加上

tags = models.ManyToManyField(Tag, blank=True, verbose_name=u‘标签‘, related_name=‘tag_post‘)

3.将Tag模型类注册在xadmin中

import xadmin
from .models import Tag

class TagAdmin(object):
    """
        作用:自定义标签管理工具
        admin.ModelAdmin:继承admin.ModelAdmin类
    """
    # 在后台显示od值,标签名
    list_display = [‘id‘, ‘name‘]
    # 增加过滤框,且以文章分类作过滤器
    list_filter = [‘name‘]
    # 增加文章标题搜索字段
    search_fields = [‘name‘]
    # 后台管理每页显示20篇文章标题

xadmin.site.register(Tag, TagAdmin)

4.定义一个模板标签

  具体使用方法,请参考:Django框架13: 自定义过滤器和标签

from django import template

register = template.Library()

@register.simple_tag
def get_post_tags(obj):
    """
    获取文章下的所有标签
    :param post: 博客
    :return: 标签列表
    """
    tags_list = obj.tags.all()
    return tags_list

5.最后在网页模板中加载

  具体的CSS我这里省略了,比较简单。

{% get_post_tags post as tags_list %}
{% if tags_list %}
    <div class="blog-tags">
        {% for tag in tags_list %}
            <span>{{ tag }}</span>
        {% endfor %}
    </div>
{% endif %}

?  这就算完成了,在后台添加好标签。最后展示如下:

  原文出处:https://jzfblog.com/detail/127,文章的更新编辑以此链接为准。欢迎关注源站文章!

原文地址:https://www.cnblogs.com/djcoder/p/10880742.html

时间: 2024-10-09 02:06:18

网站搭建 (第19天) 标签功能的相关文章

网站搭建从零开始(七) WordPress站点的完善

1.WordPress网站前后端常用语言简介和运行过程 通常一个网站的整个构建过程中需要大量的技术支持,尤其是用到很多种计算机语言.网站的构建主要分后端和前端两部分,后端代码在服务器上运行,而前端程序源码则通过网络传输到用户的浏览器,由浏览器执行.WordPress站点的页面属于动态页面,也就是说页面是程序动态生成的,不同的人.不同时刻访问同一个网址对应的页面,看到的内容是不一样的.和动态页面相对的是静态页面,静态页面的扩展名一般是html,不需要后端语言动态的生成网页. 后端语言PHP 实现网

AJAX在线音乐网站(4)Part two 功能实现

   上一篇博客里面已近总结了三个功能的具体实现,今天把剩余功能的具体实现补充总结,如果你想对整个小项目有清楚的了解,建议去看下前几篇博客. 1.AJAX在线音乐网站(1)需求和功能结构 2.AJAX在线音乐网站(2)数据库和开发环境 3.AJAX在线音乐网站(3)Part one 功能实现 d.歌曲添加功能的实现 管理员或是被管理员授权的用户可以将自己喜欢的歌曲添加到在线音乐网站的首页排行榜中.如图7.5所示. 图7.5 歌曲添加 实现过程: 通过在ASP.NET页面定义标签中的错误属性,如下

ret hat 6&ret hat 7 Apache网站搭建(一)

Apache 简介 Apache HTTP Server 是开源软件项目的杰出代表基于标准的HTTP网络协议提供网贡浏览 服务在We服务器领域中长期保持着超过半数的份额.Aapache服务器可以运行在Lnux.UNX Wndows 等多种操作系统平台中, 1.Apache 的起源 Apathe服务器是针对之前出现的若干个Web服务器程序进行整合.完善后形成的软件.其名 称来源于A Palchy Server 意思是"基于原有Web 服务程序的代码进行修改(补T) 后形成的 服务器程序"

html5仿小红书的图片标签功能

最近做了这样的一个功能,在wap网页上实现类似小红书app里的图片标签功能,很是蛋疼. 上传页示例如下图: 可以看到最上面的①是展示区域,也是编辑标签的操作区域:中间②是可滑动的缩略图,在此选择要编辑的图片:最下面③是"添加图片"和"添加标签"两个按钮. 废话不多说,下面介绍具体实现思路. 首先就是要有"选择图片"的按钮. 1 <input type="file" name="fileToUpload"

springMVC+angular+bootstrap+mysql的简易购物网站搭建

springMVC+angular+bootstrap+mysql的简易购物网站搭建 介绍 前端的css框架用了bootstrap, 以及bootstrap的JS组件, 以及很好用的angular(angular大法好), 项目一共包含了7个静态界面, 静态界面的数据展示都使用了angularJS , 后端是基于java的spring, 容器为tomcat, 项目代码分享到百度云盘 , 这个项目的优势是, 所有的显示都是在前端完成, 数据交互也是通过ajax完成, 没有频繁的页面跳转:先上两张商

linux学习笔记-第十九课-LAMP之网站搭建(二)

一.网站搭建前提 搭建好LAMP运行环境 下载网站程序,这里以Discuz X 3.2 作为示例 Discuz 程序下载地址:    简体中文GBK http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip    繁体中文BIG5 http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_TC_BIG5.zip    简体UTF-8 http://download.comsenz.c

网站搭建从零开始(二)服务器空间

原文发表自我搭建的网站,欢迎大家访问,转载请保留本段或注明原文 http://www.hainter.com/website-primer-2 前面介绍了域名相关知识,这里介绍服务器,也常常被叫做空间,也就是网站数据实际保存的地方. 1.总体介绍 根据国家相关规定,国内服务器空间需要进行备案,也就是到相关的机构进行登记,具体方法可以网上找.域名也有备案一说,国内域名不备案可能会被禁用.国外的域名和服务器,一般就不需要备案了.国外服务器的一大缺点是速度一般比国内服务器慢,有些甚至几乎没有速度. (

LAMP架构网站搭建

Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台. 随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.Net商业软件形成三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注. 目前LAMP架构是大多数中小企业最青睐的PHP架构选择,也是众多Linux SA喜欢选择

LAMP搭建以及企业网站搭建

linux中的LAMP的部署以及企业网站的搭建 1.先卸载以rpm方式安装的php以及依赖包 2.插入linux的系统盘并安装zlib-devel和libmxl2-devel 3.在挂载libmcrypt光盘,并安装和配置 (make && make install) 4.执行优化 5.安装mhash软件 并配置和安装(make && make install) 6.执行优化 7.安装mcrypt软件,并配置和安装(make && make install)