Django 站点地图,两个页面使用相同的对象

Django sitemaps, two pages using the same object

我正在尝试将站点地图添加到我构建的工作站点(第一次使用 Djnago 中的站点地图框架,所以不能 100% 确定我应该做什么)。

无论如何,我有两个页面,一个 "job detail" 页面和一个 "job apply" 页面。它们都基于 Job 模型,并且具有引用作业 ID 的 URL。

urls.py

url(r'^job-details/(?P<pk>\d+)/$', views.JobDetailView.as_view(), name='job_detail' ) ,
url(r'apply/(?P<pk>\d+)/$', views.JobApplyView.as_view(), name='job_apply'  ),

sitemap.py

class JobsSitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return Job.objects.filter( active=True,
                               venue__contacts__account_verified=True,
                               date_expires__gte=date.today())

    def lastmod(self, obj):
        return obj.date_posted

models.py

class Job(models.Model):
    ... field definitions here ....

    def get_absolute_url(self):
        return reverse('job_detail',  kwargs={'pk': self.id})

现在的问题是我已经在作业模型上指定了 get_absolute_url() 以指向作业详细信息页面。所以我也不能将它指向 job_apply 页面。

我尝试根据文档中的 "Sitemap for static views" 部分配置它,但抱怨说 URL 没有反向匹配(因为它期待 kwargs 参数)。

基于同一对象处理页面的正确方法是什么?

也许还有其他方法可以做到这一点,但一种非常简单的方法是创建两个 SiteMap。让当前的保持原样并创建一个新的,这次一定要覆盖 [location][1] 属性.

Location Optional. Either a method or attribute.

If it’s a method, it should return the absolute path for a given object as returned by items().

If it’s an attribute, its value should be a string representing an absolute path to use for every object returned

class JobsApplySitemap(Sitemap):
    changefreq = "daily"
    priority = 0.5

    def items(self):
        return Job.objects.filter( active=True,
                               venue__contacts__account_verified=True,
                               date_expires__gte=date.today())

    def location(self, obj):
        return "/apply/{0}/".format(obj.pk) 
        # you can use reverse instead


    def lastmod(self, obj):
        return obj.date_posted