3

我正在尝试在我的 django 应用程序中实现站点地图,但出现以下错误。我正在使用 django 站点地图的框架。我不知道我做错了什么。

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

这是 sitemap.py 文件

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

这是 urls.py 文件

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

3 回答 3

2

Sitemaps 从模块导入,而不是模块本身。删除模块名称:

class Sitemap(Sitemap):

即使您在此处替换导入的类,这也将起作用。

或者,可以说更清楚你在做什么,调整你的模块导入。从以下位置更改导入:

from django.contrib.sitemaps import Sitemap

至:

from django.contrib import sitemaps
于 2014-08-09T16:18:28.630 回答
0

Martijn 已经提供了正确的答案,我只想添加一个关于 Python 中命名空间的更一般性的注释:您在 Python 中使用的每个名称都必须来自某个地方。有许多始终可用的内置名称,例如 dir()。除了内置插件之外,每个名称都必须在您自己的模块代码中创建,或者从其他模块或包中导入:

>>> 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)>
于 2014-08-09T16:29:04.350 回答
0

只需将站点地图中的 s 更改为小写并将 .views 添加到导入行。因此新的导入应该是“从 django.contrib.sitemaps.views 导入站点地图”

于 2021-07-28T11:54:43.467 回答