2016-06-28 18 views
1

Ich habe seltsames Problem mit meiner Sitemap-Seite.Django TypeError bei /sitemap.xml Sequenzindex muss Integer sein, nicht 'Scheibe'

# -*- 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 appread nach den jüngsten Upgrade auf 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> 

Ich erhalte Zurückverfolgungs:

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 in letzter Zeit auf ein ähnliches Problem gestoßen ist oder mich in die richtige Richtung lenken kann, um es zu lösen. Danke für jeden Hinweis.

Antwort

1

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

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

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 von einem Experten in Django und dem Sitemap-Framework - es könnte einen besseren Weg geben, dies zu lösen. Ich hoffe, das wäre zumindest ein Schritt in die richtige Richtung.

Verwandte Themen