/ / Django TypeError v /sitemap.xml index indexu musí byť celé číslo, nie „plátok“ - python, django

Django TypeError v indexe sekvencie /sitemap.xml musí byť celé číslo, nie 'slice' - python, django

Mám so svojou stránkou stránky sitemap podivný problém.

# -*- 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,
}

Appread po nedávnej inovácii na Django 1.9.7

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>

Mám spätnú väzbu:

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"

Zaujímalo by ma, či sa niekto nedávno stretol s podobným problémom alebo či ma môže nasmerovať správnym smerom na jeho vyriešenie. Ďakujeme za radu.

odpovede:

1 pre odpoveď č. 1

Myslím, že toto je vaša spätne nekompatibilná zmena:

Ak chcete tento problém vyriešiť, vráťte zoznam z items() metóda:

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

Poznámka: Zďaleka nie som odborníkom na Django a rámec Sitemap - mohol by existovať lepší spôsob, ako to vyriešiť. Dúfam, že by to bol aspoň krok správnym smerom.