diff --git a/config/sitemaps.py b/config/sitemaps.py
index 8ca559f..56ba8aa 100644
--- a/config/sitemaps.py
+++ b/config/sitemaps.py
@@ -1,20 +1,10 @@
from django.conf import settings
from django.contrib.sitemaps import GenericSitemap
-from django.contrib.sites.models import Site
+from django.db.models.base import Model
+from requests import get
from apps.core.models import Recorrido, Linea, Parada
from apps.catastro.models import Poi, AdministrativeArea
from apps.catastro.management.commands.update_osm import kings
-import datetime
-from calendar import timegm
-from functools import wraps
-
-from django.contrib.sites.shortcuts import get_current_site
-from django.core.paginator import EmptyPage, PageNotAnInteger
-from django.http import Http404
-from django.template.response import TemplateResponse
-from django.urls import reverse
-from django.utils.http import http_date
-from django.contrib.sitemaps.views import x_robots_tag
def get_alternates(loc, sitemap_lang_code):
@@ -28,13 +18,13 @@ def get_alternates(loc, sitemap_lang_code):
# only add as alternate if this url is not the sitemap_lang_code
# (if this url is the sitemap_lang_code, then it goes directly in (not alternate))
if language_default[:2] == lang_code[:2]:
- alternates.append({'location': loc, 'lang': lang_code})
- alternates.append({'location': loc, 'lang': 'x-default'})
- alternates.append({'location': loc + '?lang=' + lang_code, 'lang': lang_code})
+ alternates.append({'location': loc, 'lang_code': lang_code})
+ alternates.append({'location': loc, 'lang_code': 'x-default'})
+ alternates.append({'location': loc + '?lang=' + lang_code, 'lang_code': lang_code})
else:
if language_default[:2] == lang_code[:2]:
- alternates.append({'location': loc, 'lang': lang_code})
- alternates.append({'location': loc, 'lang': 'x-default'})
+ alternates.append({'location': loc, 'lang_code': lang_code})
+ alternates.append({'location': loc, 'lang_code': 'x-default'})
return alternates
@@ -47,20 +37,14 @@ def get_loc(loc, sitemap_lang_code):
return loc
return loc + '?lang=' + sitemap_lang_code
+def get_item_lang(item):
+ return next((v['lang'] for k,v in kings.items() if v['country_code'] == item.country_code), 'en')
class CBSitemap(GenericSitemap):
priority = None
changefreq = None
- limit = 10000
-
- def __init__(self, info_dict, priority=None, changefreq=None, protocol=None, lang='en'):
- self.queryset = info_dict['queryset']
- self.date_field = info_dict.get('date_field')
- self.priority = priority
- self.changefreq = changefreq
- self.protocol = protocol
- self.lang = lang
+ limit = 100
def __get(self, name, obj, default=None):
try:
@@ -89,11 +73,11 @@ def _urls(self, page, protocol, domain):
latest_lastmod = lastmod
url_info = {
'item': item,
- 'location': get_loc(loc, self.lang),
+ 'location': get_loc(loc, get_item_lang(item)),
'lastmod': lastmod,
'changefreq': self.__get('changefreq', item),
'priority': str(priority if priority is not None else ''),
- 'alternates': get_alternates(loc, self.lang),
+ 'alternates': get_alternates(loc, get_item_lang(item)),
}
if domain in loc:
urls.append(url_info)
@@ -101,48 +85,20 @@ def _urls(self, page, protocol, domain):
self.latest_lastmod = latest_lastmod
return urls
-
-sitemaps = {}
-
-for (lang_code, lang_name) in settings.LANGUAGES:
- sitemaps['lineas_' + lang_code] = CBSitemap({
- 'queryset': Linea.objects.defer('envolvente'),
- }, priority=0.6, lang=lang_code)
- sitemaps['recorridos_' + lang_code] = CBSitemap({
- 'queryset': Recorrido.objects.defer('ruta', 'ruta_simple'),
- }, priority=0.6, lang=lang_code)
- sitemaps['paradas_' + lang_code] = CBSitemap({
- 'queryset': Parada.objects.defer('latlng'),
- }, priority=0.4, lang=lang_code)
- sitemaps['pois_' + lang_code] = CBSitemap({
- 'queryset': Poi.objects.defer('latlng'),
- }, priority=0.6, lang=lang_code)
- sitemaps['administrativeareas_' + lang_code] = CBSitemap({
- 'queryset': AdministrativeArea.objects.defer('geometry', 'geometry_simple'),
- }, priority=0.6, lang=lang_code)
-
-
-def getsitemaps(cc):
- sitemaps = {}
- cclang = next((v['lang'] for k,v in kings.items() if v['country_code'] == cc), '')[:2]
- # print('CCLANG:' + cclang)
- for (lang_code, lang_name) in settings.LANGUAGES:
- suffix = ''
- if cclang != lang_code[:2]:
- suffix = '_' + lang_code
- sitemaps['lineas' + suffix] = CBSitemap({
- 'queryset': Linea.objects.defer('envolvente').filter(country_code=cc),
- }, priority=0.6, lang=lang_code)
- sitemaps['recorridos' + suffix] = CBSitemap({
- 'queryset': Recorrido.objects.defer('ruta', 'ruta_simple').filter(country_code=cc),
- }, priority=0.6, lang=lang_code)
- sitemaps['paradas' + suffix] = CBSitemap({
- 'queryset': Parada.objects.defer('latlng').filter(country_code=cc),
- }, priority=0.4, lang=lang_code)
- sitemaps['pois' + suffix] = CBSitemap({
- 'queryset': Poi.objects.defer('latlng').filter(country_code=cc),
- }, priority=0.6, lang=lang_code)
- sitemaps['administrativeareas' + suffix] = CBSitemap({
- 'queryset': AdministrativeArea.objects.defer('geometry', 'geometry_simple').filter(country_code=cc),
- }, priority=0.6, lang=lang_code)
- return sitemaps
+sitemaps = {
+ 'lineas': CBSitemap({
+ 'queryset': Linea.objects.order_by('id').defer('envolvente'),
+ }, priority=0.6),
+ 'recorridos': CBSitemap({
+ 'queryset': Recorrido.objects.order_by('id').defer('ruta', 'ruta_simple'),
+ }, priority=0.6),
+ 'paradas': CBSitemap({
+ 'queryset': Parada.objects.order_by('id').defer('latlng'),
+ }, priority=0.4),
+ 'pois': CBSitemap({
+ 'queryset': Poi.objects.order_by('id').defer('latlng'),
+ }, priority=0.6),
+ 'administrativeareas': CBSitemap({
+ 'queryset': AdministrativeArea.objects.order_by('id').defer('geometry', 'geometry_simple'),
+ }, priority=0.6),
+}
diff --git a/config/urls.py b/config/urls.py
index 996212d..3db3fc2 100644
--- a/config/urls.py
+++ b/config/urls.py
@@ -3,7 +3,7 @@
from django.conf import settings
from django.contrib.sitemaps import views as sitemaps_views
-from .sitemaps import sitemaps, getsitemaps
+from .sitemaps import sitemaps
from apps.catastro.management.commands.update_osm import kings
from django.views.static import serve
@@ -34,7 +34,7 @@
# Ranking aka agradecimientos
re_path(r'^agradecimientos/$', agradecimientos, name='agradecimientos'),
- path('sitemap.xml', sitemaps_views.index, {'sitemaps': sitemaps}),
+ path('sitemap.xml', sitemaps_views.index, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.index'),
path('sitemap-.xml', sitemaps_views.sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
re_path(r'^api/v3/', include(api3Urls)),
@@ -48,12 +48,6 @@
]
-for name,k in kings.items():
- cc = k['country_code']
- urlpatterns.append(path(f'{cc}/sitemap.xml', sitemaps_views.index, {'sitemaps': getsitemaps(cc), 'sitemap_url_name': f'django.contrib.sitemaps.views.sitemap-{cc}'}))
- urlpatterns.append(path(f'{cc}/sitemap-.xml', sitemaps_views.sitemap, {'sitemaps': getsitemaps(cc)}, name=f'django.contrib.sitemaps.views.sitemap-{cc}'))
-
-
if settings.DEBUG:
import debug_toolbar
diff --git a/templates/sitemap.xml b/templates/sitemap.xml
deleted file mode 100644
index 1864856..0000000
--- a/templates/sitemap.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-{% spaceless %}
-{% for url in urlset %}
-
- {{ url.location }}
- {% if url.lastmod %}{{ url.lastmod|date:"Y-m-d" }}{% endif %}
- {% if url.changefreq %}{{ url.changefreq }}{% endif %}
- {% if url.priority %}{{ url.priority }}{% endif %}
- {% for alternate in url.alternates %}
-
- {% endfor %}
-
-{% endfor %}
-{% endspaceless %}
-