mod: современный способ создания sitemap.xml
This commit is contained in:
@@ -52,6 +52,8 @@ INSTALLED_APPS: list[str] = [
|
||||
'django.contrib.sessions',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.sites',
|
||||
'django.contrib.sitemaps',
|
||||
'taggit.apps.TaggitAppConfig',
|
||||
'web.apps.WebConfig',
|
||||
]
|
||||
@@ -138,3 +140,5 @@ STATICFILES_DIRS = [
|
||||
# Enable WhiteNoise's Gzip compression of static assets.
|
||||
if not DEBUG:
|
||||
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
@@ -17,15 +17,21 @@ Including another URLconf
|
||||
from django.contrib import admin
|
||||
from django.urls import path, re_path
|
||||
from django.conf.urls.static import static
|
||||
from django.contrib.sitemaps.views import sitemap
|
||||
from dicquo import settings
|
||||
from web import views
|
||||
from web.sitemaps import DictumSitemap
|
||||
|
||||
sitemaps = {
|
||||
'dictums': DictumSitemap,
|
||||
}
|
||||
|
||||
urlpatterns = [
|
||||
path('admin/', admin.site.urls),
|
||||
|
||||
re_path(r'^$', views.index),
|
||||
re_path(r'^(?P<dq_id>\d{1,12})_\S*$', views.by_id),
|
||||
re_path(r'^sitemap.xml$', views.sitemap),
|
||||
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
|
||||
]
|
||||
|
||||
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>https://dq.cube2.ru/</loc><priority>0.1</priority></url>{% for I in DATA %}
|
||||
<url><loc>https://dq.cube2.ru/{{ I.ID }}_{{ I.SLUG }}</loc><priority>1</priority></url>{% endfor %}
|
||||
</urlset>
|
||||
18
dicquo/web/migrations/0002_tbdictumandquotes_bischecked.py
Normal file
18
dicquo/web/migrations/0002_tbdictumandquotes_bischecked.py
Normal file
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 6.0.2 on 2026-02-18 12:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('web', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tbdictumandquotes',
|
||||
name='bIsChecked',
|
||||
field=models.BooleanField(db_index=True, default=True, help_text='Цитата проверена.', verbose_name='Проверен'),
|
||||
),
|
||||
]
|
||||
@@ -243,22 +243,22 @@ class TbAuthor(models.Model):
|
||||
return self.__str__()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
http = urllib3.PoolManager()
|
||||
# http = urllib3.PoolManager()
|
||||
# последовательно
|
||||
# Используем типограф typus (https://github.com/byashimov/typus)
|
||||
# Используем типограф Eugene Spearance (http://www.typograf.ru/)
|
||||
# Используем типограф Муравьева (http://mdash.ru/api.v1.php)
|
||||
self.szAuthor = ru_typus(self.szAuthor)
|
||||
resp = http.request("POST",
|
||||
"http://www.typograf.ru/webservice/",
|
||||
fields={"text": self.szAuthor.encode('cp1251')})
|
||||
self.szAuthorHTML = resp.data.decode('cp1251')
|
||||
# print(self.szContentHTML)
|
||||
resp = http.request("POST",
|
||||
"http://mdash.ru/api.v1.php",
|
||||
fields={"text": self.szAuthorHTML.encode('utf-8')})
|
||||
self.szAuthorHTML = json.loads(resp.data)["result"]
|
||||
# print(self.szContentHTML)
|
||||
# resp = http.request("POST",
|
||||
# "http://www.typograf.ru/webservice/",
|
||||
# fields={"text": self.szAuthor.encode('cp1251')})
|
||||
# self.szAuthorHTML = resp.data.decode('cp1251')
|
||||
# # print(self.szContentHTML)
|
||||
# resp = http.request("POST",
|
||||
# "http://mdash.ru/api.v1.php",
|
||||
# fields={"text": self.szAuthorHTML.encode('utf-8')})
|
||||
# self.szAuthorHTML = json.loads(resp.data)["result"]
|
||||
# # print(self.szContentHTML)
|
||||
super(TbAuthor, self).save(*args, **kwargs)
|
||||
|
||||
class Meta:
|
||||
@@ -315,6 +315,12 @@ class TbDictumAndQuotes(models.Model):
|
||||
verbose_name=u"Типографить",
|
||||
help_text=u"Применять типографику?"
|
||||
)
|
||||
bIsChecked = models.BooleanField(
|
||||
default=True,
|
||||
db_index=True,
|
||||
verbose_name=u"Проверен",
|
||||
help_text=u"Цитата проверена."
|
||||
)
|
||||
kAuthor = models.ForeignKey(
|
||||
TbAuthor,
|
||||
default=None,
|
||||
|
||||
20
dicquo/web/sitemaps.py
Normal file
20
dicquo/web/sitemaps.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from django.contrib.sitemaps import Sitemap
|
||||
from web.models import TbDictumAndQuotes
|
||||
import pytils
|
||||
|
||||
class DictumSitemap(Sitemap):
|
||||
changefreq = "weekly" # Как часто меняются страницы
|
||||
priority = 0.9 # Приоритет (от 0.0 до 1.0)
|
||||
|
||||
def items(self):
|
||||
# Only show checked items in sitemap
|
||||
return TbDictumAndQuotes.objects.filter(bIsChecked=True).order_by('-id')
|
||||
|
||||
def lastmod(self, obj):
|
||||
return obj.dtEdited
|
||||
|
||||
def location(self, obj):
|
||||
# Generates URL in format: /123_slug
|
||||
slug = pytils.translit.slugify(obj.szContent.lower())[:120]
|
||||
return f"/{obj.id}_{slug}"
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
__author__ = "Sergei Erjemin"
|
||||
__copyright__ = "Copyright 2020, Sergei Erjemin"
|
||||
__copyright__ = "Copyright 2020-2026, Sergei Erjemin"
|
||||
__credits__ = ["Sergei Erjemin", ]
|
||||
__license__ = "GPL"
|
||||
__version__ = "0.0.1"
|
||||
__version__ = "0.3.9"
|
||||
__maintainer__ = "Sergei Erjemin"
|
||||
__email__ = "erjemin@gmail.com"
|
||||
__status__ = "in progress"
|
||||
@@ -92,13 +92,3 @@ def index(request):
|
||||
response = render(request, template, to_template)
|
||||
return response
|
||||
|
||||
|
||||
def sitemap(request):
|
||||
template = "sitemap.xml" # шаблон
|
||||
to_template = []
|
||||
dq = TbDictumAndQuotes.objects.order_by('id').all()
|
||||
for i in dq:
|
||||
to_template.append({"ID": i.id,
|
||||
"SLUG": pytils.translit.slugify(i.szContent.lower()[:120])})
|
||||
response = render(request, template, {"DATA": to_template})
|
||||
return response
|
||||
|
||||
Reference in New Issue
Block a user