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

Django sitemap框架报错:ArticleSitemap类型对象无filter属性如何解决

问题原因

你混用了Django Sitemap的两种使用方式,触发了报错:

  • GenericSitemap的queryset参数需要接收Django模型的查询集对象,你传入了自定义的ArticleSitemap类,该类本身没有filter方法,因此抛出AttributeError。
  • 另外你的ArticleSitemap类里的时间方法名写错了,Django约定的回调名是lastmod而非lastmodified,写错会导致站点地图里的最后更新时间不生效。
修复步骤

1. 优先使用已定义的自定义Sitemap(推荐)

你已经在sitemaps.py里配置了更新频率、优先级、最后更新时间规则,直接用它即可,修改urls.py代码:

from django.urls import path
from django.contrib.sitemaps.views import sitemap 
from MArticles.sitemaps import ArticleSitemap

app_name='MArticles'

urlpatterns = [
    path('sitemap.xml', sitemap, 
        {'sitemaps': {'blog': ArticleSitemap}},
        name='django.contrib.sitemaps.views.sitemap'), 
    # 其余原有路由保持不变
    path('articles/',article,name="articles"),
    path('article_detail/<int:pk>/<slug:slug>/',article_detail,name="article_detail"),
    path('articles/tag/<slug:slug>/', articletags, name="article-tags"),
]

2. 修复ArticleSitemap的方法名

修改sitemaps.py里的方法名:

from django.contrib.sitemaps import Sitemap
from .models import Article

class ArticleSitemap(Sitemap):
    changefreq = "weekly"
    priority = 0.8

    def items(self):
        return Article.modelmanager.all()

    # 把原来的lastmodified改成标准名lastmod
    def lastmod(self, obj):
        return obj.last_updated

(可选)如果你确实想用GenericSitemap的写法,就把info_dict的queryset改成文章查询集即可,不过这种方式会丢失你自定义的更新频率、最后更新时间配置,不推荐:

info_dict = {
    'queryset': Article.modelmanager.all(),
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:18:04