2009-08-19 8 views
0

Ich versuche, zusätzlich zu einer normalen sitemap.xml eine Google News-Sitemap zu erstellen, um zu vermeiden, dass zusätzliche numerische Zeichen in meine URLs eingefügt werden müssen.Django Google News Sitemap.xml

Ich habe die sitemap.xml mit Djangos Contrib-System aufgebaut und es funktioniert gut, aber ich habe Schwierigkeiten, den Kontext an den (nicht verifizierten) Patch zu übergeben, der das Framework aktualisiert, um eine news_sitemap.xml zu generieren.

Dies ist der Patch, den ich integriert habe: http://code.djangoproject.com/ticket/10907, aber der Kontext wird nicht übergeben. Ich denke, dass das Problem mit dem Format ist, das ich verwende, um das Objekt in meinem views.py zu bauen.

Der Code habe ich ausgeführt:

views.py

from django.template import RequestContext 
from django.shortcuts import render_to_response 
from basic.blog.models import Post 
from pages.models import Page 
from datetime import date, datetime 
from django.contrib.sitemaps import Sitemap, NewsSitemap 

'''Builds the sitemap.xml section for all news posts.''' 
class PostSitemap(Sitemap): 
    changefreq = "daily" 
priority = 0.3 
def items(self): 
    return Post.objects.published() 
def lastmod(self, obj): 
    return obj.modified 

'''Builds the sitemap.xml section for all main pages.''' 
class PageSitemap(Sitemap): 
changefreq = "daily" 
priority = 0.8 
def items(self): 
    return Page.objects.filter(status=1) 
def lastmod(self, obj): 
    return obj.last_modification_date 

'''Builds the news_sitemap.xml from blog module.''' 
class SiteappNews(Sitemap): 
def items(self): 
    return Post.objects.published() 
def publication_date(self, obj): 
    return obj.publish 

urls.py

from django.conf.urls.defaults import * 
from django.contrib.sitemaps import Sitemap, FlatPageSitemap, NewsSitemap 
from siteapp.views import homepage, news_homepage, qc_contact, PostSitemap, PageSitemap, SiteappNews 
from basic.blog.feeds import * 
from basic.blog.models import Post 
from pages.models import Page 

''' Enables Django Admin.''' 
from django.contrib import admin 
admin.autodiscover() 

'''Add Feeds functionality.''' 
feeds = { 
'latest': BlogPostsFeed, 
} 

'''http://docs.djangoproject.com/en/1.0/ref/contrib/sitemaps/''' 
sitemaps = { 
'pagesitemap': PageSitemap, 
'postsitemap': PostSitemap, 
'flatpages': FlatPageSitemap, 
} 

news_sitemaps = { 
'newssitemap': NewsSitemap, 
} 

urlpatterns = patterns('', 
(r'^admin/doc/', include('django.contrib.admindocs.urls')), 
(r'^admin/(.*)', admin.site.root), 
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), 
(r'^news_sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': news_sitemaps, 'template': 'news_sitemap.xml'}), 

Die nur Wrapper-Vorlage gibt. Ich vermisse etwas Offensichtliches, denke ich, obwohl es ein Problem mit dem Patch geben könnte. Hier ist der relevante Code dafür:

Innerhalb Sitemaps contrib init Py

class NewsSitemap(Sitemap): 
# This limit is defined by Google. See the index documentation at 
# http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=74288 
limit = 1000 
def get_url_info(self, item, current_site): 
    url_info = super(NewsSitemap, self).get_url_info(item, current_site) 
    url_info.update({ 
     'publication_date': self._get('publication_date', item, None), 
     'keywords': self._get('keywords', item, None), 
    }) 
    return url_info 

Antwort

1

Sortiert dieses heraus mich nach ein wenig zu graben.

Changed die urls.py Linien:

news_sitemaps = { 
    'newssitemap': SiteappNews, 
} 

Und den Code in views.py verändert die entsprechenden Google News Felder aus dem benutzerdefinierten Modul zu bauen.

wird Ihre Zukunft Leser (Hallo!) Variieren, aber es wird so etwas wie:

class SiteappNews(Sitemap): 
    def items(self): 
     return Post.objects.published() 
    def publication_date(self, obj): 
     return obj.publish 
    def keywords(self, obj): 
     return obj.tags 

überprüfen Sie Ihre SQL-Felder für Ihre Modelle Unter in den richtigen Daten für ‚veröffentlichen‘, ‚Tags‘, usw.