@kolodins97

Как правильно изменить правила генерации sitemap.xml?

нужна помощь касающаяся файла Sitemap.xml. У меня есть свой сайт, и сейчас карта сайта на нём такова:
urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://pro-basket.ru/</loc>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://pro-basket.ru/info/</loc>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://pro-basket.ru/contacts/</loc>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://pro-basket.ru/price/</loc>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
</urlset>

Это всё статические страницы, за исключением первой (всё же на ней располагается список предстоящих матчей, которые обновляются ежедневно). Карта сайта создаётся файлами:
sitemap.py:
from django.contrib import sitemaps
from django.urls import reverse


class StaticViewSitemap(sitemaps.Sitemap):
    priority = 0.5
    changefreq = 'daily'

    def items(self):
        return ['index', 'post', 'contacts', 'price',]

    def location(self, item):
        return reverse(item)

urls.py:
from django.urls import path
from . import views
from django.views.generic.base import TemplateView
from django.contrib.sitemaps.views import sitemap
from .sitemaps import StaticViewSitemap



sitemaps = {
    'static': StaticViewSitemap,
}


urlpatterns = [
    path('', views.index, name='index'),
    path('events/<country>/<liga>/', views.liga_detail, name='liga_detail'),
    path('accounts/login/', views.accounts),
    path('events/<int:index_id>/', views.match_detail, name='match_detail'),
    path('overall/<home>&<away>/<int:index_id>/', views.match, name='match'),
    path('separately/<home>&<away>/<int:index_id>/', views.match_sap, name='match_sap'),
    path('personal/<home>&<away>/<int:index_id>/', views.match_per, name='match_per'),
    path('quater/<home>&<away>/', views.QuaterListView.as_view(), name='quater'),
    path('live/<home>&<away>/', views.LiveListView.as_view(), name='live'),
    path('livestat/', views.JsonFilterLiveView.as_view(), name='live_filter'),
    path('statistica/', views.JsonFilterMoviesView.as_view(), name='json_filter'),
    path('modeling/<home>&<away>/', views.Monte, name='modeling'),
    path('price/', views.price, name='price'),
    path('contacts/', views.contacts, name='contacts'),
    path('info/', views.post, name='post'),
    path(
        "robots.txt",
        TemplateView.as_view(template_name="robots.txt", content_type="text/plain"),
    ),
    path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
         name='django.contrib.sitemaps.views.sitemap'),
]


На сайте есть раздел по каждой лиге, у каждой свой адрес, например: https://pro-basket.ru/events/Europe/Euroleague/ и по каждому матчу, например: https://pro-basket.ru/overall/FC%20Barcelona&Bilba... . И вот мне нужно настроить генерацию файла sitemap, чтобы в него попадали все ссылки на все матчи и на все лиги (с ежедневным обновлением), перепробовал уже многое по различным инструкциям и туториалам в интернете, при попытке что-то изменить - сайт "падает". Сразу хочу сказать, что данный сайт перешел ко мне "по наследству" и я пока не супер-знаток языка Python. Если какие-то файлы забыл показать - напишите об этом.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@fet_bondarev
Можно написать свой простой автогенератор sitemap, все ваши ссылки генерируются циклом в момент запроса sitemap. Ниже мой пример с выводом товара, категорий и подкатегорий
spoiler

В корневом urls.py:
...
from django.views.generic import TemplateView  # для вывода policy, robots и т.д.
from shop_app import views  # для вывода sitemap

urlpatterns = [
                  path('', include('shop_app.urls')),
                  path('sitemap.xml', views.SitemapXmlView.as_view()),
                  path('robots.txt', TemplateView.as_view(template_name='doc/robots.txt', content_type='text/plain')),
                  path('policy.txt', TemplateView.as_view(template_name='doc/policy.txt', content_type='text/plain')),
                  path('terms.txt', TemplateView.as_view(template_name='doc/terms.txt', content_type='text/plain')),
                  path('admin/', admin.site.urls),
                  ...


Код из views.py:
...
class SitemapXmlView(TemplateView):
    """АВТОГЕНЕРАТОР SITEMAPxml"""
    template_name = 'sitemapxml.html'
    content_type = 'application/xml'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['category_list'] = Category.objects.all()
        context['sub_category_list'] = SubCategory.objects.all()
        context['product_list'] = Product.objects.filter(public=True).all()
        return context
...


И сам файл sitemapxml.html:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

   <url>
      <loc>{{ request.scheme }}://{{ request.get_host }}</loc>
      <changefreq>weekly</changefreq>
      <priority>1.0</priority>
   </url>

   {% for object in category_list %}

   <url>
      <loc>{{ request.scheme }}://{{ request.get_host }}{{ object.get_absolute_url }}</loc>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
   </url>

   {% endfor %}

   {% for object in sub_category_list %}

   <url>
      <loc>{{ request.scheme }}://{{ request.get_host }}{{ object.get_absolute_url }}</loc>
      <changefreq>weekly</changefreq>
      <priority>0.8</priority>
   </url>

   {% endfor %}

   {% for object in product_list%}

   <url>
      <loc>{{ request.scheme }}://{{ request.get_host }}{{ object.get_absolute_url }}</loc>
      <lastmod>{{ object.update|date:"Y-m-d" }}</lastmod>
      <changefreq>weekly</changefreq>
      <priority>1.0</priority>
   </url>

   {% endfor %}
</urlset>

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы