【问题标题】:Render XML Sitemap from Django View从 Django 视图渲染 XML 站点地图
【发布时间】:2018-02-12 12:56:14
【问题描述】:

Django 视图中的以下代码:

def sitemap(request):
    return render(request, 'sitemap.xml', content_type = 'text/xml')

产生以下错误:

异常类型:UnicodeDecodeError 异常值:
“utf8”编解码器无法解码位置 0 的字节 0xff:无效的起始字节

我该如何解决这个问题?我要做的就是呈现一个 XML 站点地图。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 不确定这是否会有所帮助(我今天刚刚了解了站点地图......),但也许可以让您朝着正确的方向前进:我的快速搜索表明 0xff 是 UTF-16 BOM。我不完全确定您是如何创建站点地图的,但我要做的第一件事是尝试使用 UTF-8 编码保存 XML,然后使用或不使用 BOM。我相信sitemap.xml standards 只支持 UTF-8(没有提到任何关于 BOM 的内容)。
  • 我解决了。站点地图 XML 文档需要添加以下内容:
  • @Foobar:请将您的解决方案作为单独的答案发布

标签: xml django unicode sitemap utf


【解决方案1】:

Django 支持内置站点地图,这里有一个演示:

common/sitemaps.py

from django.contrib.sitemaps import Sitemap
from django.urls import reverse_lazy

from news.models import News


class StaticViewSitemap(Sitemap):
    priority = 0.5
    changefreq = 'weekly'

    def items(self):
        return ['index', 'news_index', 'version', 'rss']

    def location(self, item):
        return reverse_lazy(item)


class NewsSitemap(Sitemap):
    priority = 0.5
    changefreq = 'weekly'

    def items(self):
        return News.objects.all().order_by('-id')

    def location(self, item):
        return reverse_lazy('news_detail', kwargs={'pk': item.id})


sitemaps = {
    'static': StaticViewSitemap,
    'news': NewsSitemap,
}

你的项目主 url.py:

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

urlpatterns = [
    url(r'^$', IndexView.as_view(), name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^news/', include('news.urls')),
    url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}, name='sitemap')
]

文档是here

【讨论】:

  • 好的,谢谢。但是,如果我想使用已经创建的站点地图怎么办?我已经有一个 sitemap.xml,只是希望搜索引擎能够抓取它。
猜你喜欢
  • 2020-04-02
  • 2011-08-28
  • 2011-08-06
  • 2018-12-13
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
相关资源
最近更新 更多