/ / Django TypeError in /sitemap.xml Sequenzindex muss eine Ganzzahl sein, nicht 'Slice' - Python, Django

Django TypeError im Sequenzindex /sitemap.xml muss integer sein, nicht 'slice' - python, django

Ich habe ein seltsames Problem mit meiner Sitemap-Seite.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

import datetime
import urllib

from django.core.urlresolvers import reverse
from django.contrib.sitemaps import Sitemap
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from pytz import UTC

from mychat.models import Question

MONTHLY = "monthly"
WEEKLY = "weekly"
DAILY = "daily"
HOURLY = "hourly"
now = datetime.datetime.utcnow().replace(tzinfo=UTC)

# The following lists are separated only for fixed ordering.


class RecentForumViewPaginationSitemap(Sitemap):
"""
Sitemap generator that takes Django Recent tab in forum list view and
generates all pages in pagination.
"""
changefreq = DAILY
priority = 0.90
protocol = "https"

def items(self):
post_queryset = Question.objects.all().order_by("-created")
paginator = Paginator(post_queryset, 12)
return paginator.page_range

def location(self, page):
return "?".join([reverse("question_list"), urllib.urlencode({"recent_page": page})])

sitemaps = {
"recent_forum_views": RecentForumViewPaginationSitemap,
}

Es wird nach dem letzten Upgrade auf Django 1.9.7 angezeigt

urls.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.conf.urls import patterns, url

from my.sitemap import sitemaps

urlpatterns = patterns(
"",
url(r"^sitemap.xml$", "django.contrib.sitemaps.views.sitemap", {"sitemaps": sitemaps,
"template_name": "my/custom_sitemap.xml"}),
)

custom_sitemap.xml

<?xml version="1.0" encoding="utf-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>{{ url.location }}</loc>
{% if url.lastmod %}<lastmod>{{ url.lastmod|date:"Y-m-d" }}</lastmod>{% endif %}
{% if url.changefreq %}<changefreq>{{ url.changefreq }}</changefreq>{% endif %}
{% if url.priority %}<priority>{{ url.priority }}</priority>{% endif %}
</url>
{% endfor %}
{% endspaceless %}
</urlset>

Ich bekomme eine Rückverfolgung:

ERROR base.handle_uncaught_exception.284 Internal Server Error: /sitemap.xml
Traceback (most recent call last):
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/contrib/sitemaps/views.py", line 16, in inner
response = func(request, *args, **kwargs)
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/contrib/sitemaps/views.py", line 67, in sitemap
protocol=req_protocol))
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/contrib/sitemaps/__init__.py", line 104, in get_urls
urls = self._urls(page, protocol, domain)
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/contrib/sitemaps/__init__.py", line 112, in _urls
for item in self.paginator.page(page).object_list:
File "/home/bartosz/.virtualenvs/my9/local/lib/python2.7/site-packages/django/core/paginator.py", line 55, in page
return self._get_page(self.object_list[bottom:top], number, self)
TypeError: sequence index must be integer, not "slice"

Ich frage mich, ob jemand kürzlich auf ein ähnliches Problem gestoßen ist oder mich in die richtige Richtung weisen kann, um es zu lösen. Danke für jeden Rat.

Antworten:

1 für die Antwort № 1

Ich denke, das ist Ihre rückwärts-inkompatible Änderung:

Um dies zu beheben, geben Sie die Liste aus der Liste zurück items() Methode:

def items(self):
post_queryset = Question.objects.all().order_by("-created")
paginator = Paginator(post_queryset, 12)
return list(paginator.page_range)

Hinweis: Ich bin weit davon entfernt, ein Experte für Django und das Sitemap-Framework zu sein - es könnte einen besseren Weg geben, dies zu lösen. Ich hoffe, das wäre zumindest ein Schritt in die richtige Richtung.