статические страницы в фреймворке Django - PullRequest
3 голосов
/ 24 июня 2010

У меня есть некоторые сомнения по поводу генерации sitemap.xml и, в частности, структуры карты сайта Django.

Допустим, у меня есть приложение для блога, в котором есть страницы post_detail с содержимым каждого сообщения и несколько «вспомогательных» страниц, таких как «просмотр по тегу», «просмотр по автору» и т. Д.

  1. Обязательно ли включать каждую страницу в sitemap.xml, включая вспомогательные страницы? Я хочу, чтобы все «вспомогательные» страницы были проиндексированы, так как там много ключевых слов и текста. Я знаю, что файлы Sitemap разработаны для того, чтобы помочь индексировать страницы, дать некоторые указания веб-сканеру, но не ограничивать сканирование. Какова лучшая практика для этого? Включить все или включить только важные страницы?
  2. Если все страницы в sitemap.xml допустимы, каков наилучший способ отправки простых, не хранимых в БД страниц, в каркас сайта? Один из возможных способов - создать класс карты сайта, который возвращает обратные URL-адреса по имени URL-адреса. Но, похоже, это не СУХОЙ, потому что мне нужно будет зарегистрировать эти url-имена во второй раз (в функции url () и в классе Sitemap).

Возможно, у меня может быть специальная функция django.conf.urls.defaults.url для регистрации отображения URL для карты сайта ... Как вы думаете?

Спасибо.

1 Ответ

3 голосов
/ 23 июля 2010

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

Что касается включения не сгенерированных страниц, мы просто создали подкласс django.contrib.sitemaps.Sitemap и просматриваем его в виде простого текстового файла с одним URL на строку. Что-то вроде:

class StaticSitemap(Sitemap):
    priority = 0.8
    lastmod = datetime.datetime.now()

    def __init__(self, filename):
        self._urls = []
        try:
            f = open(filename, 'rb')
        except:
            return

        tmp = []
        for x in f:
            x = re.sub(r"\s*#.*$", '', x) # strip comments
            if re.match('^\s*$', x):
                continue # ignore blank lines
            x = string.strip(x) # clean leading/trailing whitespace
            x = re.sub(' ', '%20', x) # convert spaces
            if not x.startswith('/'):
                x = '/' + x
            tmp.append(x)
        f.close()
        self._urls = tmp
    # __init__

    def items(self):
        return self._urls

    def location(self, obj):
        return obj

Вы можете вызвать его с помощью чего-то вроде этого в своей основной программе сайта:

sitemap['static'] = StaticSitemap(settings.DIR_ROOT +'/sitemap.txt')

И наш файл sitemap.txt выглядит примерно так:

# One URL per line.
# All paths start from root - i.e., with a leading /
# Blank lines are OK.

/tour/
/podcast_archive/
/related_sites/
/survey/
/youtube_videos/

/teachers/
/workshops/
/workshop_listing_info/

/aboutus/
/history/
/investment/
/business/
/contact/
/privacy_policy/
/graphic_specs/
/help_desk/
...