【问题标题】:Multilanguage's Sitemap, get_absolute_url and location多语言站点地图、get_absolute_url 和位置
【发布时间】:2023-02-12 13:31:23
【问题描述】:

请帮助我生成正确的站点地图。 我的 Django 2.2 多语言站点具有标准国际化框架。

带有 get_absolute_url 的 Model.py

class Data(models.Model):
   ...
    def get_absolute_url(self):
        from django.urls import reverse
        return reverse("data_detail", kwargs={"slug": str(self.id)})


站点地图.py

class DataSitemap (Sitemap):
    changefreq = "daily"
    priority = 0.5
    i18n = True

    def items(self):
        return Data.objects.all()

    def location(self, obj):
        return '/news/data/%s/' % (obj.pk)

网址.py

from django.contrib.sitemaps.views import sitemap
from .sitemaps import DataSitemap

sitemaps = {
    'data'   : DataSitemap
}

urlpatterns = i18n_patterns(
   path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, 
   name='django.contrib.sitemaps.views'),
)

现在,当我生成 sitemap.xml 时,我没有语言前缀,

<url>
   <loc>example.com/news/data/1/</loc>
     <lastmod>2022-03-24</lastmod>
     <changefreq>daily</changefreq>
   <priority>0.5</priority>
</url>
<url>
   <loc>example.com/news/data/1/</loc>
     <lastmod>2022-01-08</lastmod>
     <changefreq>daily</changefreq>
   <priority>0.5</priority>
</url>

对于没有 get_absolute_url 但没有硬编码位置的其他模型 - 一切正常,正确添加了语言前缀。

如何修复我的 Sitemap 代码?

【问题讨论】:

    标签: python django url url-routing multilingual


    【解决方案1】:

    只需从站点地图类中删除“位置”功能即可。当您使用 get_absolute_url 函数定义您的模型时,它将返回包含语言代码的 url。

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      相关资源
      最近更新 更多