From 12b4bc1fbdc0b9a2a999b58f08a636255e1b680a Mon Sep 17 00:00:00 2001 From: j Date: Mon, 14 Aug 2023 13:56:22 +0200 Subject: [PATCH] use sitemap --- app/views.py | 52 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/app/views.py b/app/views.py index ac138aa..0b59a82 100644 --- a/app/views.py +++ b/app/views.py @@ -1,3 +1,6 @@ +import xml.etree.ElementTree as ET + +from django.utils.timezone import datetime, timedelta from django.shortcuts import render from django.http import HttpResponse @@ -5,17 +8,52 @@ from django.http import HttpResponse def robots_txt(request): txt = '''User-agent: * Disallow: -''' - return HttpResponse(txt, 'text/plain') - - txt = '''User-agent: * -Disallow: Sitemap: {} '''.format(request.build_absolute_uri('/sitemap.xml')) return HttpResponse(txt, 'text/plain') def sitemap_xml(request): - sitemap = '' - return HttpResponse(sitemap, 'application/xml') + now = datetime.now() + from .item.models import Item + urlset = ET.Element('urlset') + urlset.attrib['xmlns'] = "http://www.sitemaps.org/schemas/sitemap/0.9" + urlset.attrib['xmlns:xsi'] = "http://www.w3.org/2001/XMLSchema-instance" + urlset.attrib['xsi:schemaLocation'] = "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" + + url = ET.SubElement(urlset, "url") + loc = ET.SubElement(url, "loc") + loc.text = request.build_absolute_uri('/') + lastmod = ET.SubElement(url, "lastmod") + lastmod.text = now.strftime("%Y-%m-%d") + changefreq = ET.SubElement(url, "changefreq") + changefreq.text = 'hourly' + priority = ET.SubElement(url, "priority") + priority.text = '1.0' + + url = ET.SubElement(urlset, "url") + loc = ET.SubElement(url, "loc") + loc.text = request.build_absolute_uri('/archive/') + lastmod = ET.SubElement(url, "lastmod") + lastmod.text = now.strftime("%Y-%m-%d") + changefreq = ET.SubElement(url, "changefreq") + changefreq.text = 'weekly' + priority = ET.SubElement(url, "priority") + priority.text = '1.0' + + for item in Item.objects.exclude(published=None).exclude(published__gt=now).order_by('-published'): + url = ET.SubElement(urlset, "url") + loc = ET.SubElement(url, "loc") + loc.text = request.build_absolute_uri(item.get_absolute_url()) + # This date should be in W3C Datetime format, can be %Y-%m-%d + lastmod = ET.SubElement(url, "lastmod") + lastmod.text = item.modified.strftime("%Y-%m-%d") + # always, hourly, daily, weekly, monthly, yearly, never + changefreq = ET.SubElement(url, "changefreq") + changefreq.text = 'daily' + # priority of page on site values 0.1 - 1.0 + priority = ET.SubElement(url, "priority") + priority.text = '0.9' + data = b'\n' + ET.tostring(urlset) + return HttpResponse(data, 'application/xml')