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

时间:2017-06-06 11:05:06

标签: django sitemap

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

无论如何,我有两页,一个"工作细节"页面,"工作申请"页。这些都基于作业模型,并且具有引用作业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页面。

我尝试根据静态视图的&#34; Sitemap配置它&#34;文档中的部分,但是抱怨该URL没有反向匹配(因为它期待kwargs参数)。

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

1 个答案:

答案 0 :(得分:1)

可能有其他方法可以做到这一点,但真正简单的是创建两个SiteMaps。让当前版本保持不变并创建一个新版本,这次确保覆盖[location][1]属性。

  

位置可选。方法或属性。

     

如果它是一个方法,它应该返回给定的绝对路径   item()返回的对象。

     

如果是属性,则其值应为表示的属性   用于返回的每个对象的绝对路径

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