Django 1.6: name 'sitemaps' is undefined

I am trying to implement sitemaps in my django app, but I am getting the following error. I am using the django site skeleton. I don't know what I am doing wrong.

Traceback:
File "mysite/urls.py" in <module>
  3. from sitemap import *
File "mysite/sitemap.py" in <module>
  5. class Sitemap(sitemaps.Sitemap):

Exception Type: NameError at /
Exception Value: name 'sitemaps' is not defined

      

Here is the sitemap.py file

from django.contrib.sitemaps import Sitemap
from meddy1.models import Doctor
import datetime

class Sitemap(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.datetime.now()

    def location(self, obj):
        return reverse(obj)


class DoctorSitemap(Sitemap):
    changefreq = "Daily"
    priority = 1

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

    def lastmod(self, obj):
        return obj.date

      

Here is the urls.py file

from django.conf.urls import patterns, include, url
from django.contrib import admin
from sitemap import *

admin.autodiscover()

sitemaps = {
    'pages':Sitemap(['homepage_imprint', 'homepage_archive']),
    'doctor':DoctorSitemap,
    'site':Sitemap(['name_of_url', 'name_of_url']),
}

urlpatterns = patterns('',
    url(r'^', include('meddy1.urls')),
    url(r'^', include('django.contrib.auth.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^sitemap\.xml', include('django.contrib.sitemaps.views.sitemap'),{'sitemaps': sitemaps}), 
)

      

+3


source to share


2 answers


You imported Sitemaps

from the module, not the module itself. Remove the module name:

class Sitemap(Sitemap):

      

This will work even if you change the imported class.

Alternatively, and perhaps a clearer definition of what you are doing, adjust your module imports. Change imports from:



from django.contrib.sitemaps import Sitemap

      

in

from django.contrib import sitemaps

      

+1


source


Martijn has already provided the correct answer, I just want to add a more general note about namespaces in Python: every name you use in Python must come from somewhere. There are a number of built-in names that are always available, eg. DIR (). Besides built-in modules, each name must be created in your own code in a module OR imported from some other module or package:



>>> x
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
>>> x = 1
>>> x
1
>>> sys
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'sys' is not defined
>>> import sys
>>> sys
<module 'sys' (built-in)>

      

0


source







All Articles