Django Sitemaps: получить только страницы текущего сайта - PullRequest
2 голосов
/ 22 марта 2012

Я хотел бы создать файл Sitemap для конкретного сайта с помощью файлов Sitemap Django.

Моя идея заключалась в том, чтобы сделать что-то вроде этого:

def items(self):
    current_site = Site.objects.get_current(self.request)
    return current_site.pages.filter(draft=False)

Но у меня есть две проблемы:

  1. self.request не определено, есть ли способ получить действительное значение current_site в файле Sitemap?
  2. URL элементов неверен, он должен начинаться с правильного значения current_site

Полагаю, мне нужно передать правильный набор запросов в мой файл Sitemap, но как я могу это сделать?

Спасибо,

Реми

Ответы [ 2 ]

1 голос
/ 14 мая 2012

Таким способом вы можете передать специфичный для сайта набор запросов.

def items(self):   
  return YourModel.objects.by_site()

by_site - это функция менеджера YourModel,

def by_site(self, site=None, **kwargs):
    """Get all pages for this site"""
    if not site:
        site = Site.objects.get_current()

    site = site.id

    return self.filter(site__id__exact = site, **kwargs)
0 голосов
/ 14 мая 2012

Похоже, что фреймворк sites используется неправильно

Фреймворк sites не предназначен для динамического переключения сайтов на основе запроса.Он предназначен для использования в нескольких отдельных развертываниях, запущенных из одной и той же базы данных.

Проблема 1:

Чтобы исправить функцию items(), необходимо установить SITE_IDв settings.py Что позволяет Site.objects.get_current() работать где угодно, без необходимости request объекта.

Проблема 2:

Доменные имена должны , а не быть включенным в URL.Карта сайта запрашивается из домена, поэтому известно, что все находится в этом домене.

Это относится ко всем URL-адресам в django.

Чтобы исправить это, убедитесь, что метод get_absolute_url() включенваша модель возвращает строку, начинающуюся с "/".Ничего, связанного с доменным именем.

URL для элемента генерируется с помощью get_absolute_url() или путем вызова Sitemap.location() с элементом.Документация для location() примеров того, в какой форме должен быть URL.

Для получения дополнительной информации ознакомьтесь с этим билетом об ошибке , о той же проблеме.

...