Compare commits

...

2 commits

Author SHA1 Message Date
j
19b9f72ed9 shift current week 2023-08-14 14:10:30 +02:00
j
12b4bc1fbd use sitemap 2023-08-14 13:56:22 +02:00
5 changed files with 77 additions and 11 deletions

View file

@ -57,8 +57,9 @@ class Item(models.Model):
return json.dumps(comments)
@classmethod
def public(cls):
now = timezone.now()
def public(cls, now=None):
if now is None:
now = timezone.now()
qs = cls.objects.exclude(published=None).filter(published__lte=now).order_by('-published')
cal = now.date().isocalendar()
monday = now.date() - timedelta(days=now.date().isocalendar().weekday - 1)

View file

@ -1,9 +1,9 @@
import xml.etree.ElementTree as ET
from datetime import date, datetime, timedelta
import json
from django.utils import timezone
from django.utils.timezone import datetime, timedelta
from django.shortcuts import render
from django.db.models import Q
from django.utils.html import mark_safe
@ -16,12 +16,25 @@ from ..signalbot.rpc import send_reaction
from .utils import render_to_json
from ..utils import default_context
TS_FORMAT = "%Y-%m-%dT%H:%M:%S"
def index(request):
context = default_context(request)
week, archive = models.Item.public()
now = request.GET.get("now")
if request.user.is_staff and now:
now = datetime.strptime(now, TS_FORMAT)
elif request.user.is_staff:
now = datetime.now()
else:
now = None
week, archive = models.Item.public(now)
context['items'] = week
context['archive'] = archive.exists()
if now:
context['now'] = now
context['previous_week'] = (now - timedelta(days=7)).strftime(TS_FORMAT)
context['next_week'] = (now + timedelta(days=7)).strftime(TS_FORMAT)
return render(request, 'index.html', context)

View file

@ -98,3 +98,10 @@ nav.overlay {
padding-bottom: 8px;
}
}
.now {
background: lightyellow;
color: black;
padding: 8px;
opacity: 0.8;
}

View file

@ -40,6 +40,13 @@
<div class="about">
{{ overlay.content | safe }}
</div>
{% if now %}
<div class="now">
<a href="?now={{ previous_week }}">previous week</a>
{{ now }}
<a href="?now={{ next_week }}">next week</a>
</div>
{% endif %}
<div class="user">
{% if request.user.is_authenticated %}
<div>You are logged in as {{ request.user.username }}</div>

View file

@ -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'<?xml version="1.0" encoding="UTF-8"?>\n' + ET.tostring(urlset)
return HttpResponse(data, 'application/xml')