广告位 |
django无限分类
2021年9月25日 11:28编程 > 1400人已围观
简介 很多网站的首页上都会展示很多的分类,诸如:京东,淘宝,C站等等,都是利用Django模型中的自关联做的,今天做一期无限级分类的Blog! 定义了一个基本的模型用于继承(创建时间和更新时间)...
很多网站的首页上都会展示很多的分类,诸如:京东,淘宝,C站等等,都是利用Django模型中的自关联做的,今天做一期无限级分类的Blog!
?模型创建
定义了一个基本的模型用于继承(创建时间和更新时间)
from django.db import models
# Create your models here.
class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True)
update_time = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
class Cart(BaseModel):
name = models.CharField(max_length=50)
parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='son')
level = models.IntegerField(null=True, blank=True)
top_parent = models.IntegerField(null=True, blank=True)
class Meta:
db_table = 'cart'
?功能实现
根据前端所需要的数据来构造数据
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Cart
from .serializer import CartSerializer
def getCart(carts):
"""
解析分类
"""
dict = {}
list = []
for i in carts:
dict[i['id']] = i
for j in carts:
parent_id = j['parent']
if parent_id:
if 'son' not in dict[parent_id]:
dict[parent_id]['son'] = []
dict[parent_id]['son'].append(j)
else:
list.append(j)
return list
class CartView(APIView):
"""
获取分类
"""
def get(self, request):
# 查询分类
cart_obj = Cart.objects.all()
cart_ser = CartSerializer(cart_obj, many=True)
cart_list = getCart(cart_ser.data)
return Response({'code': 200, 'cartList': cart_list})
?路由配置
"""
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.urls import path
from . import views
urlpatterns = [
path('home/', views.CartView.as_view()) # 首页分类接口
]
?前端功能
用vue-cli脚手架
<template>
<div>
<h3>无限级分类展示</h3>
<div v-for="i in cart_list">
<p v-for="j in i.son">
<span>{{ i.name }}</span>  
<span>{{ j.name }}</span> 
<span v-for="k in j.son">{{ k.name }}</span> 
</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
cart_list: []
}
},
methods: {
getCart() {
this.axios.get('cart/home/',).then(res => {
this.cart_list = res.data.cartList
})
}
},
mounted() {
this.getCart()
}
}
</script>
?效果展示
主要是实现后端功能,页面效果可忽略!
?总结
利用django模型提供的自关联构造首页数据,一级分类下面嵌套二级分类,二级分类下面嵌套三级等等,利用**related_name**实现向下查找即可!!!
下一篇: django部署静态文件访问
广告位 |
相关文章
随机图文
-
ETF基金:红利ETF的解读与投资攻略
今年红利ETF也火了,很多人都是冲着红利二字而来,却不知红利ETF的全名,有一个叫做上证红利ETF (510880),还有一个叫做中证红利ETF(515080),其实去年也有一个红利ETF很火,叫做深证红利ETF (159905),一共是三个不同的红利ETF,也就是我们常说的红利三兄弟。... -
阿里云oss的HTTP头信息用ossutil批量修改
一个网站用阿里云oss来存附件,毕竟成本比直接买ecs还是便宜很多的,用起来就有些麻烦咯,最近发现oss的所有pdf doc文档打开,然后才会出现那个下载按钮,这个非常不友好,特别是大的pdf文档,改成直接下载当然更好了,问了下客服,... -
我靠宠物带货,月入过万
“我可以不买新衣服,我的毛毛必须买最好的猫粮”,毛毛是95后姑娘如如养的猫,对于自己养的毛孩子,如如认为,穷可以穷自己,富就要富宠物。如如的态度也是当下一些年轻人对待宠物的写照。... -
卖货,社群猛于社区
中秋节,王旭收到了期盼已久的添可吸拖一体机2.0LED(以下简称“添可”),官方旗舰店活动价3890元,而王旭在社群团购只花了3099元。 节省800的原因是一周前,王旭收到快递后在朋友圈的一个开箱视频分享。...