2010-05-28 87 views
1

我的Django站点的自动站点地图在将www包含在URL上并将其保留出去(我一直希望拥有它)之间波动。这在谷歌的分歧没有正确索引我的网页,所以我试图缩小什么会导致这个问题。Django站点地图间歇性www

我已经设置了PREPEND_WWW = True,并且我在网站框架中的网站记录被设置为包括www等。它被设置为www.example.com而不是example.com。我使用的是memcached,但页面应该在48小时后从缓存中过期,所以我不会认为这会导致问题?

您可以在http://www.livingspaceltd.co.uk/sitemap.xml(刷新页面几次)中看到有效的问题。

我的Sitemaps的设置是相当平淡,所以我怀疑这是问题,但如果它的东西很明显,我在这里失踪的代码:

***urls.py*** 

sitemaps = { 
    'subpages': Subpages_Sitemap, 
    'standalone_pages': Standalone_Sitemap, 
    'categories': Categories_Sitemap, 
} 

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

***sitemaps.py*** 

# -*- coding: utf-8 -*- 
from django_ls.livingspace.models import Page, Category, Standalone_Page, Subpage 
from django.contrib.sitemaps import Sitemap 

class Subpages_Sitemap(Sitemap): 
    changefreq = "monthly" 
    priority = 0.4 
    def items(self): 
     return Subpage.objects.filter(restricted_to__isnull=True) 

class Standalone_Sitemap(Sitemap): 
    changefreq = "weekly" 
    priority = 1 
    def items(self): 
     return Standalone_Page.objects.all() 

class Categories_Sitemap(Sitemap): 
    changefreq = "weekly" 
    priority = 0.7 
    def items(self): 
     return Category.objects.all() 

回答

0

PREPEND_WWW = settings.py中的True必须出现在缓存变量设置的上方。这解决了我的问题,这与你的问题一样。当我在Google网站管理员工具中提交我的站点地图时,我遇到了同样的问题。

+0

嗯,有趣。说实话,当我手动重新启动缓存时,我自己解决了这些问题。我有兴趣在我遇到问题的同时尝试一下,看看它是否更好。无论如何,我已经进行了您建议的更改以防止出现任何其他问题。谢谢! – 2010-10-21 09:22:04

0

这可能是最古怪的问题之一我见过。但事情是Django在站点地图中构建URL的方式非常简单。它只是从数据库中获取CURENT站点对象,并追加了“域”字段的值,以页的相对位置:

current_site = Site.objects.get_current() 
... 
loc = "http://%s%s" % (current_site.domain, self.__get('location', item)) 

(source)

你确定你没有做任何事情在数据库级别不可思议?如果您有多个镜像数据库,但它们不一致,则可能会产生类似的效果。尝试设置一个只显示Site.objects.get_current()的测试视图。它可能会波动。

如果您使用任何第三方缓存应用程序(如Johnny Cache),请尝试将其关闭。

此外,请确保您没有两个Site对象 - 一个带有,另一个没有www(它不应该给你类似的效果,但有多个服务器实例,为不同的SITE_ID配置...也许? )

+0

感谢您的回复Ludwik ...我没有对多个dbs做任何事情,我只有一个网站对象。我已经尝试使用'Site.objects.get_current()'使用shell,并且它始终如一地将它与www一起返回。我会尝试设置一个测试视图,看看是否有所不同,并在周末后回到办公室时关闭缓存。 – 2010-05-28 17:34:30

+0

好的,我试过完全关闭缓存,但无济于事。我还设置了一个测试页面,它只是在http://www.livingspaceltd.co.uk/url-test/上输出'Site.objects.get_current()' - www是不断呈现的,因为它应该是。我正在编辑我的原始问题,以包含站点地图代码,以防万一它在那里。 – 2010-06-01 11:12:50

+0

感谢您的帮助Ludwik,它帮助我缩小了问题范围。 – 2010-06-01 11:39:12

0

好吧,它看起来像是一个缓存错误 - 我不太确定是不是错误,因为我在一周前做了更改,所以它明确地表现不正确,而且我有尝试一些不同的方法来重新启动它。因此,这需要进行更深入的调查,但现在正在开展工作。