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

Django动态ListView筛选问题:点击图片跳转分类页面报错

这个错误的核心是模板生成URL时传入了空值,结合你的代码,从以下几个方向逐一排查修复:

1. 模板跳转URL的变量错误

你的IndexView模板里,{% url "main:select" slug %}中的slug变量根本不存在于当前上下文里,应该使用当前图片对应的分类slug,也就是image.categories.slug。另外要注意categories字段允许为null,必须加判断避免空值报错:

{% for image in main_images %}
<div class="cbp-item web-design print"> 
  {% if image.categories %}
    <a href="{% url "main:select" image.categories.slug %}" class="cbp-caption cbp-singlePageInline">
      <div class="cbp-caption-defaultWrap"> 
        <img src="{{ MEDIA_URL }}{{ image.image.url }}" alt=""> 
      </div>
    </a>
  {% else %}
    <!-- 无分类的图片可添加默认处理,比如不显示跳转链接 -->
    <div class="cbp-caption-defaultWrap"> 
      <img src="{{ MEDIA_URL }}{{ image.image.url }}" alt=""> 
    </div>
  {% endif %}
</div>
{% endfor %}

另外注意{{ MEDIA_URL }} {{ image.image.url }}里的空格要去掉,否则图片URL会包含空格导致加载失败。

2. SelectView视图的逻辑错误

你的SelectView存在两处关键逻辑错误:

  • get_queryset里用title=self.kwargs['slug']查找Category完全错误,URL传入的是slug参数,应该用slug=self.kwargs['slug']匹配
  • 过滤Media时,categories__title=self.category是把Category对象和title字段做对比,逻辑混乱,直接用外键对象过滤即可
  • get_context_data里把Category对象赋值给slug,应该传入字符串类型的slug值

修正后的SelectView:

class SelectView(ListView):
    template_name = "main/select.html"
    model = Media

    def get_queryset(self):
        # 通过slug查找分类,而非title
        self.category = get_object_or_404(Category, slug=self.kwargs['slug'])
        # 直接用分类对象过滤关联的Media,同时保留可见性筛选
        return Media.objects.filter(categories=self.category, visable=True)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 传入分类的slug字符串,而非对象
        context['slug'] = self.category.slug
        # 可顺便传入分类对象,方便在模板显示分类标题
        context['category'] = self.category
        return context
3. 模型的优化建议(可选但推荐)
  • 外键字段命名categories不合适,因为一个Media只关联一个Category,复数命名容易让人误解为多对多关系,建议改成category,修改后需同步更新视图和模板中的字段名
  • Category模型里的slug = AutoSlugField(populate_from='title')末尾多了一个反引号,属于语法错误,必须删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:48:38