Django Google News Sitemap.xml
-
18-09-2019 - |
Pergunta
Eu estou tentando construir um Sitemap do Google Notícias, além de uma sitemap.xml normal para evitar ter que colocar caracteres numéricos adicionais em meus URLs.
Eu tenho construir o sitemap.xml usando o sistema contrib do Django e ele funciona muito bem, mas eu estou tendo problemas para passar o contexto para o patch (não verificado) actualização do quadro para gererate um news_sitemap.xml.
Este é o patch que eu integrados: http://code.djangoproject.com/ticket/ 10907 , mas o contexto não está passando. Eu acho que o problema é com o formato que estou usando para construir o objeto na minha views.py.
O código que tem em execução:
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'}),
As saídas modelo apenas invólucro. Eu estou faltando algo óbvio eu acho que, embora possa haver um problema com o patch aplicado. Aqui está o código relevante para isso:
Dentro de 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
Solução
Ordenado este para fora eu mesmo após um pouco de escavação.
Mudou as linhas urls.py para:
news_sitemaps = {
'newssitemap': SiteappNews,
}
E alterado o código em views.py para construir os campos relevantes do Google Notícias a partir do módulo personalizado.
Seu irá variar futuro leitor (Olá!), Mas será algo como:
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
verificar os seus campos de SQL para os seus modelos de sub nos dados corretos para 'publicar', 'etiquetas', etc.