2017-09-04 2 views
0

Der folgende Code in einer Ansicht Django:Render XML Sitemap von Django anzeigen

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

ergibt die folgende Fehlermeldung:

Ausnahmetyp: UnicodeDecodeError Ausnahmewert:
'utf8' Codec kann nicht Dekodierbyte 0xff in Position 0: ungültiges Startbyte

Wie kann ich das beheben? Ich versuche nur, eine XML-Sitemap zu rendern. Jede Hilfe wäre willkommen. Vielen Dank.

+0

Ich bin mir nicht sicher, ob das helfen wird (ich habe gerade von Sitemaps erfahren ...), aber vielleicht kann es dich in die richtige Richtung bringen: Meine schnelle Suche würde bedeuten, dass 0xff eine UTF-16 BOM ist. Ich bin mir nicht ganz sicher, wie Sie Ihre Sitemap erstellt haben, aber die ersten Dinge, die ich tun würde, wäre zu versuchen, das XML mit UTF-8-Codierung und dann mit oder ohne BOM zu speichern. Ich glaube, die [sitemap.xml-Standards] (https://www.sitemaps.org/protocol.html) unterstützen nur UTF-8 (erwähnt nichts über BOM). –

+0

Ich habe es gelöst. Das Sitemap-XML-Dokument benötigte Folgendes: – Foobar

Antwort

0

Django Unterstützung Einbau-Sitemap, hier ist eine Demo:

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, 
} 

Ihre peoject Haupt 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') 
] 

doc ist here.

+0

Okay, danke. Was aber, wenn ich eine bereits erstellte Sitemap verwenden möchte? Ich habe bereits eine sitemap.xml und möchte einfach, dass Suchmaschinen es spinnen können. – Foobar