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
我正在尝试将站点地图添加到我构建的工作站点(第一次使用 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