在不考虑模型的情况下生成django站点地图?

在不考虑模型的情况下生成django站点地图?,django,django-sitemaps,Django,Django Sitemaps,我看到的所有在Django中生成站点地图的示例似乎都是在一个模型上迭代生成URL 例如,从Django文档中: class BlogSitemap(Sitemap): changefreq = "never" priority = 0.5 def items(self): return Entry.objects.filter(is_draft=False) def lastmod(self, obj): return obj.

我看到的所有在Django中生成站点地图的示例似乎都是在一个模型上迭代生成URL

例如,从Django文档中:

class BlogSitemap(Sitemap):
    changefreq = "never"
    priority = 0.5

    def items(self):
        return Entry.objects.filter(is_draft=False)

    def lastmod(self, obj):
        return obj.pub_date
我的web应用程序无法执行此操作。我有数千个对应于产品页面的URL,这些页面是使用django生成的,基于从直接插入postgres数据库的API检索到的数据

因此,我使用django从数据库中检索记录并确定它们的显示方式,但我所拥有的URL与任何django模型都不对应(这是将来将改进和更改的内容)

那么,有没有一种方法可以在站点地图中指定特定的URL而无需迭代模型?

items()
可以返回任何python对象,它不需要是Django模型。默认情况下,每个对象都会被传递到
location
方法,该方法应该返回对象的URL(在Django模型上,它使用
get\u absolute\u URL()
方法)

因此,基本上,如果您有一个python类,它定义了要在站点地图中显示的每个“页面”(它可能只是一个字符串或字符串的元组),并且您定义了一个方法来返回该页面的URL,那么您只需在
location()
中调用该方法即可覆盖默认行为

也可以只是url路径中使用的字符串列表。然后,
location()
将对每个字符串使用
reverse()
。例如,假设您的产品页面url使用如下正则表达式:

path('products/<str:category>/<str:name>', name='product')
然后您的
位置(项目)
函数需要返回:

return reverse('product', kwargs={'category': item.category, 'name': item.name}) 

有关更多详细信息,请参阅

问题在于我没有定义页面的python类。我有一个使用regexp的url,将url中的内容传递给视图,然后视图从db检索相关数据。但是如果有url,为什么要使用Sitemap框架?只需直接生成URL列表并将其添加到sitemap.xml,或者在我添加到答案时重建您的URL。因为URL将每隔几个月更改一次,如果有办法通过django更自动地执行此操作,我宁愿这样做。我很难理解您的答案,我想知道您是否可以澄清?目前,我有一个列出“集合”的页面,它检索具有集合名称的所有产品,然后每个“集合页面”返回数据库中与集合名称对应的所有产品。集合没有模型,只有产品。我不确定如何根据您的答案生成连接页面的链接?
return reverse('product', kwargs={'category': item.category, 'name': item.name})