Django项目实战----实现首页频道分类显示和显示fastdfs存储的图片

  • 分析类别数据格式

在这里插入图片描述

  • 查询商品类别提取到工具包,新建一个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://192.168.85.129:8888/'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值