django sitemap http://example.com
Asked Answered
C

1

29

I try to generate a sitemap.xml with my django project.

In my project i don't have models (my database is empty), i have just static url (like 'home' or 'About' ).

I succeded to generate a sitemap.xml but i have "http://example.com" instead that my domain name.

This is my sitemap.xml:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>
http://example.com/accueil
</loc>
<lastmod>
2013-03-14
</lastmod>
<changefreq>
weekly
</changefreq>
</url>
<url>
<loc>
http://example.com/cv
</loc>
<lastmod>
2013-03-14
</lastmod>
<changefreq>
weekly
</changefreq>
</url>
<url>
<loc>
http://example.com/portfolio
</loc>
<lastmod>
2013-03-14
</lastmod>
<changefreq>
weekly
</changefreq>
</url>
<url>
<loc>
http://example.com/a_propos
</loc>
<lastmod>
2013-03-14
</lastmod>
<changefreq>
weekly
</changefreq>
</url>
</urlset>

and my urls.py:

from django.conf.urls import patterns, include, url
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static

from sitemaps import BasicSitemap
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()

sitemaps= {
    'pages' : BasicSitemap(['accueil','cv','portfolio','apropos'])
}

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'portfolio.views.home', name='home'),
    # url(r'^portfolio/', include('portfolio.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('portail_portfolio.urls')),
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})

)

urlpatterns += staticfiles_urlpatterns() + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

And my sitemaps.py:

from django.contrib.sitemaps import Sitemap
from django.core.urlresolvers import reverse
#from portail_portfolio.models import Entry

from datetime import datetime

class BasicSitemap(Sitemap):

    def __init__(self, names):
        self.names = names

    def items(self):
        return self.names
    
    def changefreq(self, obj):
        return 'weekly'

    def lastmod(self, obj):
        return datetime.now()

    def location(self,obj):
        return reverse(obj)
Center answered 14/3, 2013 at 6:28 Comment(0)
A
55

django.contrib.sitemaps relies on django.contrib.sites.

Go into your admin section /admin/sites/site/1/ and change the domain name you see there.

Authenticate answered 14/3, 2013 at 6:35 Comment(2)
Here's some relevant reading on the Sites frameworkLangmuir
Brilliant, thanks. This is exactly why I was getting TemplateDoesNotExist: sitemap.xml when I set up a very basic sitemap and tried it on localhost: my SITE_ID in settings.py was hardcoded to "domain.com", so that's why it wasn't working locally for meRamrod

© 2022 - 2024 — McMap. All rights reserved.