我正在尝试将站点地图添加到我构建的工作站点(第一次在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参数)。
基于同一个对象处理页面的正确方法是什么?
答案 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