2017-09-04 158 views
0

在Django视图以下代码:渲染XML网站

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

产生以下错误:

异常类型:UnicodeDecodeError错误 异常值:
'UTF8' 编解码器不能在位置0解码字节0xff:无效起始字节

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

+0

不知道这是否有帮助(我刚刚了解了今天的站点地图...),但也许可以让你朝着正确的方向前进:我的快速搜索会建议0xff是UTF-16 BOM。我不完全确定你是如何创建你的站点地图的,但我会做的第一件事是尝试使用UTF-8编码保存XML,然后使用或不使用BOM。我相信[sitemap.xml标准](https://www.sitemaps.org/protocol.html)仅支持UTF-8(没有提及任何关于BOM的内容)。 –

+0

我解决了它。网站地图XML文档需要添加以下内容: – Foobar

回答

0

Django的支持,内置地图,这里是一个演示:

通用/ 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, 
} 

您peoject主要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

+0

好的,谢谢。但是如果我想使用已经创建的站点地图呢?我已经有一个sitemap.xml,只是想让搜索引擎能够蜘蛛它。 – Foobar