Django sitemaps: XML declaration allowed only at the start of the document

763 Views Asked by At

I have been working on the implementation of the sitemaps on Django-2.2 for the Blog website.

The code structure I followed was-

Sitemaps.py

from django.contrib.sitemaps import Sitemap
from .models import Post

class PostSitemap(Sitemap):    
    changefreq = "never"
    priority = 0.9

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

urls.py

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

sitemaps = {
    'posts': PostSitemap
}

urlpatterns = [
    url(r'^sitemap\.xml/$', sitemap, {'sitemaps' : sitemaps } , name='sitemap'),
]

settings.py

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'django.contrib.sitemaps',
]

SITE_ID = 1

I guess that was pretty much it as I referenced so many links. but when I open 127.0.0.1:8000/sitemap.xml It gives me th following error-

This page contains the following errors:
error on line 2 at column 6: XML declaration allowed only at the start of the document
Below is a rendering of the page up to the first error.

That's it, nothing on the server log. Please, If anyone can please help me out. Thanks in advance

1

There are 1 best solutions below

1
burning On BEST ANSWER

Your xml document has new line in the beginning. This is the main reason you are getting this issue.

Please change your urls.py file as per document.

https://docs.djangoproject.com/en/2.2/ref/contrib/sitemaps/

Your url should look like below.

from django.contrib.sitemaps.views import sitemap

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