如何编写Sitemap类生成带两个参数的对比页面URL?
你可以借助itertools.combinations生成所有不重复的两两组对,对应你需要的对比页面URL,完整实现代码如下:
首先导入依赖:
from itertools import combinations from django.contrib.sitemaps import Sitemap from .models import Items
然后编写对比页面的Sitemap类:
class CompareSitemap(Sitemap): changefreq = "monthly" priority = 0.7 # 可根据你的需求调整优先级 def items(self): # 先取出所有Item实例,转成列表供组合生成 all_items = list(Items.objects.order_by('id')) # combinations生成所有不重复的两两组合,不会出现(b,a)这类反向重复项 return combinations(all_items, 2) def location(self, obj): # obj是两个Item实例组成的元组 item_a, item_b = obj # 如果你的URL用的是slug/名称而非id,把.id换成对应字段即可 return f'/compare/{item_a.id}/{item_b.id}/'
之后记得在项目的sitemaps配置字典中添加这个类,示例:
# urls.py中的sitemap配置 sitemaps = { 'items': ItemsSitemap, # 你原有的单Item页面的sitemap 'compare': CompareSitemap, # 新增的对比页面sitemap }
这样生成的sitemap就会自动包含所有两两对比页面的URL,和你给出的格式完全匹配。
内容的提问来源于stack exchange,提问作者stedy
相关产品推荐
相关产品推荐

