Карта сайта Django прерывистый www

Автоматическая карта сайта для моего сайта Django колеблется между включением www в URL-адресах и его исключением (я стремлюсь иметь его постоянно). Это имеет последствия в том, что Google неправильно индексирует мои страницы, поэтому я пытаюсь сузить круг причин, вызывающих эту проблему.

Я установил PREPEND_WWW = True, и запись моего сайта в структуре сайтов включает www, например. он установлен на www.example.com, а не на example.com. Я использую memcached, но страницы должны удаляться из кеша через 48 часов, поэтому я бы не подумал, что это может вызвать проблему?

Вы можете увидеть действующую проблему на странице http://www.livingspaceltd.co.uk/sitemap.xml (обновите страницу несколько раз).

Моя настройка карт сайта довольно прозаична, поэтому я сомневаюсь, что это проблема, но на случай, если это что-то очевидное, мне не хватает вот кода:

***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()

person Jen Z    schedule 28.05.2010    source источник


Ответы (3)


PREPEND_WWW = True в файле settings.py должен отображаться над настройками вашей переменной кэширования. Это устранило мою проблему, которая точно такая же, как и у вас. Я столкнулся с той же проблемой, когда отправлял свою карту сайта в инструмент Google для веб-мастеров.

person Ronnie Beltran    schedule 19.10.2010
comment
Хм, интересно. Честно говоря, проблемы, которые у меня были, разрешились сами собой, когда я вручную перезапустил кеширование. Мне было бы интересно попробовать это в то же время, когда у меня возникли проблемы, чтобы увидеть, не лучше ли это исправить. Тем не менее, я внес изменения, которые вы предложили, чтобы предотвратить дальнейшие проблемы. Спасибо! - person Jen Z; 21.10.2010

Возможно, это одна из самых странных проблем, которые я когда-либо видел. Но дело в том, что Django создает URL-адреса в карте сайта чрезвычайно просто. Он просто получает текущий объект Site из базы данных и добавляет значение поля «домен» к относительному расположению страницы:

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

(источник)

Вы уверены, что не делаете ничего странного на уровне базы данных? Если у вас есть несколько зеркальных баз данных, но они не согласованы, это может дать аналогичный эффект. Попробуйте настроить тестовое представление, в котором отображается только Site.objects.get_current(). Вероятно, он также будет колебаться.

Если вы используете какое-либо стороннее приложение для кэширования (например, Johnny Cache), попробуйте отключить его.

Кроме того, убедитесь, что у вас нет двух объектов Site - один с www и один без www (это не должно дать вам подобный эффект, но с несколькими экземплярами сервера, настроенными для разных SITE_ID ... может быть?)

person Ludwik Trammer    schedule 28.05.2010
comment
Спасибо за ответ, Людвик ... Я не делаю ничего особенного с несколькими базами данных, и у меня есть только один объект сайта. Я пробовал использовать Site.objects.get_current() с помощью оболочки, и она последовательно возвращает его с www, как и должно. Я попробую настроить тестовое представление, как вы предлагаете, чтобы увидеть, отличается ли это, а также полностью отключить кеширование, когда я вернусь в офис после выходных. - person Jen Z; 28.05.2010
comment
Хорошо, я попытался полностью отключить кеширование, но безуспешно. Я также создал тестовую страницу, которая просто выводит Site.objects.get_current() по адресу livingspaceltd.co.uk/url -test - www присутствует постоянно, как и должно быть. Я редактирую свой исходный вопрос, чтобы включить код карты сайта на случай, если там что-то есть. - person Jen Z; 01.06.2010
comment
Спасибо за помощь, Людвик, это помогло мне сузить проблему. - person Jen Z; 01.06.2010

Что ж, похоже, что это была ошибка кеширования - я не совсем уверен, что было не так, так как я внес изменения более недели назад, так что это определенно не вело себя должным образом, и мне пришлось попробовать пару различные методы для его перезапуска. Это требует более глубокого исследования, но сейчас оно работает.

person Jen Z    schedule 01.06.2010