You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面渲染前按行业筛选Django模型数据?

实现按行业筛选视频的方案

没问题,咱们一步步来搞定这个按行业筛选视频的需求,分两种场景给你方案:

1. 单个行业的专属视图(比如你现有的automotive视图)

如果只是针对单个行业写视图,直接在filter()里指定sector的匹配条件就行,甚至可以用不区分大小写的匹配避免大小写不一致的问题:

def automotive(request):
    # 筛选sector为"Automotive"的视频,__iexact实现不区分大小写匹配
    videos = Videos.objects.filter(sector__iexact="Automotive")
    # 记得把视频数据传给模板渲染
    return render(request, 'automotive_videos.html', {'videos': videos})

2. 通用筛选视图(适配多个行业,更高效)

如果导航栏有N个行业,每个都写单独的视图太冗余,推荐写一个通用视图,通过URL参数传递行业名称:

第一步:配置URL路由

在urls.py里添加一个带sector参数的路由:

from django.urls import path
from . import views

urlpatterns = [
    # 通用筛选路由,sector参数接收行业名称
    path('videos/<str:sector>/', views.filter_videos_by_sector, name='filter_videos'),
    # 你也可以保留原来的automotive路由,或者直接用通用路由替代
    # path('automotive/', views.automotive, name='automotive'),
]

第二步:编写通用视图函数

在views.py里写这个通用筛选逻辑:

def filter_videos_by_sector(request, sector):
    # 把URL里的行业名称转成首字母大写(可选,根据你的数据存储格式调整)
    normalized_sector = sector.title()
    # 筛选对应行业的视频
    videos = Videos.objects.filter(sector__iexact=normalized_sector)
    # 把当前行业和视频数据传给模板
    return render(request, 'videos_list.html', {
        'videos': videos,
        'current_sector': normalized_sector
    })

第三步:导航栏链接配置

在导航栏模板里,每个行业的链接指向这个通用路由,传递对应的sector参数:

<nav class="sector-nav">
    <a href="{% url 'filter_videos' sector='automotive' %}">Automotive</a>
    <a href="{% url 'filter_videos' sector='technology' %}">Technology</a>
    <a href="{% url 'filter_videos' sector='healthcare' %}">Healthcare</a>
    <!-- 其他行业依此类推 -->
</nav>

第四步:模板渲染视频列表

在videos_list.html里循环渲染视频:

<h2>{{ current_sector }} 行业视频</h2>
<div class="video-grid">
    {% for video in videos %}
        <div class="video-card">
            <h4>{{ video.brand }}</h4>
            <video src="{{ video.video.url }}" controls></video>
        </div>
    {% empty %}
        <p>当前行业暂无视频内容</p>
    {% endfor %}
</div>

额外优化建议(可选)

如果你的行业列表是固定的,建议把sector字段改成关联模型,避免手动输入的错误:

# 先定义行业模型
class Sector(models.Model):
    name = models.CharField(max_length=255, unique=True, verbose_name="行业名称")

    def __str__(self):
        return self.name

# 修改Videos模型的sector字段
class Videos(models.Model):
    brand = models.CharField(max_length=255, verbose_name="品牌名称", blank=False, null=True)
    # 关联到Sector模型,数据更规范
    sector = models.ForeignKey(Sector, on_delete=models.CASCADE, verbose_name="所属行业")
    video = models.FileField(upload_to="videos/")

这样筛选的时候可以直接通过行业对象匹配,更可靠:

videos = Videos.objects.filter(sector__name__iexact=normalized_sector)

内容的提问来源于stack exchange,提问作者user14360754

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 16:53:13