- 分析类别数据格式
- 查询商品类别提取到工具包,新建一个py文件
from collections import OrderedDict
from apps.goods.models import GoodsChannel
def get_categories():
# 查询出所有商品频道数据 并按频道组名和组内顺序排序
channels = GoodsChannel.objects.order_by('group_id', 'sequence')
# 生成一个自动排序的字典
categories = OrderedDict()
# 遍历数据
for channel in channels:
# 提取出group_id
group_id = channel.group_id
# 如果group_id不存在字典内
if group_id not in categories:
# 就存入字典key为group_id 值为 一个字典 字典内两个列表 一个频道一个子级频道
categories[group_id] = {
'channels': [],
'sub_cats': []
}
# 查询一级频道内的所有商品类别
category1 = channel.category
# 把一级频道的数据放到列表内
categories[group_id]['channels'].append({
'id': category1.id,
'name': category1.name,
'url': channel.url
})
# 查询子级频道
category2s = category1.subs.all()
# 遍历子级频道数据存入列表
for cat2 in category2s:
# 遍历子级频道
category3s = cat2.subs.all()
sub_cats3 = []
# 数据存入列表
for cat3 in category3s:
sub_cats3.append({
'id': cat3.id,
'name': cat3.name
})
categories[group_id]['sub_cats'].append({
'id': cat2.id,
'name': cat2.name,
'sub_cats': sub_cats3
})
# 返回数据
return categories
- 广告数据显示
from utils.goods import get_categories
class IndexView(View):
def get(self, request):
# 获取商品类别数据
categories = get_categories()
# 存放广告数据的字典
contents = {}
# 查询出所有广告
content_categories = ContentCategory.objects.all()
# 遍历广告数据存入字典 类别键为key value为可以展示的广告数据
for cat in content_categories:
contents[cat.key] = cat.content_set.filter(status=True).order_by('sequence')
# 组织前端需要的json数据格式
context = {
'categories': categories,
'contents': contents
}
# 返回模板 和 模板内需要的数据
return render(request, 'index.html', context)
- 图片不显示问题
url没有拼接正确
- 新建storage.py,自定义存储类
from django.core.files.storage import Storage
from meiduo_market import settings
# 继承于Storage类 必须实现它的的open方法和save方法 pass掉 文档内直说实现就可以
class FastDFSStorage(Storage):
def _open(self, name, mode='rb'):
pass
def _save(self, name, content):
pass
def url(self, name):
# 拼接url ip地址 + 原本url 返回
return settings.FDFS_BASE_URL + name
- settings.py文件内添加配置
# 使用自定义存储类
DEFAULT_FILE_STORAGE = 'utils.fastdfs.storage.FastDFSStorage'
# 配置url
FDFS_BASE_URL = 'http://xxxxxxxxx:8888/'