2012-12-17 87 views
8

我遇到了在我的應用程序中實現站點地圖的問題。我使用的是Virtualenv,django 1.4和Python 2.7。如果你能幫我解決這個問題,我將不勝感激。在Django中實現站點地圖

這是我做了什麼:

  1. 在我的urls.py

    from sitemap import JobPostSitemap 
    sitemaps = { 
        'jobs': JobPostSitemap, 
    } 
    ... # Removed other urls 
    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), 
    
  2. 然後在我的sitemap.py文件

    from django.contrib.sitemaps import Sitemap 
    from jobs.models import JobPost 
    
    class JobPostSitemap(Sitemap): 
        changefreq = "never" 
        priority = 0.5 
    
        def items(self): 
         return JobPost.objects.filter(approved=True) 
    
        def lastmod(self, obj): 
         return obj.pub_date 
    
  3. 我的settings.py文件如下:

    TEMPLATE_LOADERS = (
        'django.template.loaders.filesystem.Loader', 
        'django.template.loaders.app_directories.Loader', 
    ) 
    ... 
    INSTALLED_APPS = ( 
        'django.contrib.auth', 
        'django.contrib.contenttypes', 
        'django.contrib.sessions', 
        'django.contrib.sites', 
        'django.contrib.messages', 
        'django.contrib.staticfiles', 
        'django.contrib.sitemaps', 
        'jobs', 
    ) 
    ... 
    

現在,當我打開我的瀏覽器,然後導航到http://localhost:8000/sitemap.xml,我得到以下錯誤:

ImportError at /sitemap.xml 

No module named django.contrib.sitemaps 
Request Method: GET 
Request URL: http://localhost:8000/sitemap.xml 
Django Version: 1.4.2 
Exception Type: ImportError 
Exception Value:  
No module named django.contrib.sitemaps 
Exception Location: /home/frank/Projects/python/django/techjobsea.com/baseline27/local/lib/python2.7/site-packages/Django-1.4.2-py2.7.egg/django/utils/importlib.py in import_module, line 35 
Python Executable: /home/frank/Projects/python/django/techjobsea.com/baseline27/bin/python 
Python Version: 2.7.3 

我想不出什麼我已經錯過了還是做錯了。

+0

你是否遵循了'sitemap'的所有安裝步驟?所需的步驟[這裏](https://docs.djangoproject.com/en/dev/ref/contrib/sitemaps/) – doru

+0

@doru是的。我遵循了所有的步驟。 – Frankline

+0

您是否找到解決方案? –

回答

17

我有類似的錯誤。我改變了這樣的urls.py定義:

from sitemap import JobPostSitemap 
from django.contrib.sitemaps.views import sitemap 
sitemaps = { 
    'jobs': JobPostSitemap, 
} 
... # Removed other urls 
url(r'^sitemap\.xml$', sitemap, {'sitemaps': sitemaps}), 

它爲我工作。我不知道爲什麼......

+0

夥計,這實際上工作。謝謝。我會很感興趣的知道爲什麼這個工作與其他方法相反。 Sweeet! – Frankline

+1

'patterns'調用是否有一個非空的'prefix'參數?類似'urlpatterns = patterns('some.prefix',url(r'...'),....)'?這可能是你的問題。 – naktinis

-2

要激活站點地圖生成您的Django的網站,這一行添加到您的URLconf:

(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}) 

這告訴Django,當客戶訪問/sitemap.xml建立一個網站地圖。

+1

這與他已有的有何不同? – piokuc

0

這可能是一個PYTHONPATH問題。運行python manage.py shell並嘗試到import django.contrib.sitemaps

+0

我做到了。沒有錯誤。 – Frankline

0

問題可能在於您尚未完全提交的url.py配置。在我的情況下,我無意中留下了一個表單的前綴:urlpatterns = patterns('...'),它阻止了Django找到正確的路徑。

+0

謝謝,但我已包括該部分。除了站點地圖以外,所有的網址都可以正常工作。 – Frankline