Django 谷歌新闻 Sitemap.xml

发布于 2024-08-02 02:44:04 字数 3027 浏览 5 评论 0原文

除了正常的 sitemap.xml 之外,我还尝试构建 Google 新闻站点地图,以避免在 URL 中添加额外的数字字符。

我已经使用 Django 的 contrib 系统构建了 sitemap.xml,并且效果很好,但是我在将上下文传递到更新框架以生成 news_sitemap.xml 的(未经验证的)补丁时遇到了麻烦。

这是我集成的补丁: http://code.djangoproject.com/ticket/10907,但上下文没有传递。 我认为问题在于我在views.py 中用来构建对象的格式。

我运行的代码:

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'}),

模板仅输出包装器。 我认为我错过了一些明显的东西,尽管应用的补丁可能存在问题。 以下是相关代码:

在站点地图 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

I'm trying to build out a Google News Sitemap in addition to a normal sitemap.xml to avoid having to put additional numerical characters in my URLs.

I've build out the sitemap.xml using Django's contrib system and it works great, but I'm having trouble passing the context to the (unverified) patch updating the framework to gererate a news_sitemap.xml.

This is the patch I've integrated: http://code.djangoproject.com/ticket/10907, but the context isn't passing. I think the issue is with the format I'm using to build the object in my views.py.

The code I have running:

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

The template outputs just wrapper. I'm missing something obvious i think, though there might be an issue with the patch applied. Here's the relevant code for that:

Within 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
, 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps}), (r'^news_sitemap.xml

The template outputs just wrapper. I'm missing something obvious i think, though there might be an issue with the patch applied. Here's the relevant code for that:

Within sitemaps contrib init.py


, 'django.contrib.sitemaps.views.sitemap', {'sitemaps': news_sitemaps, 'template': 'news_sitemap.xml'}),

The template outputs just wrapper. I'm missing something obvious i think, though there might be an issue with the patch applied. Here's the relevant code for that:

Within sitemaps contrib init.py

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花心好男孩 2024-08-09 02:44:04

经过一番挖掘后,我自己整理出了这个。

将 urls.py 行更改为:

news_sitemaps = {
    'newssitemap': SiteappNews,
}

并更改了views.py 中的代码以从自定义模块构建相关的 Google 新闻字段。

未来的读者会有所不同(你好!),但它会类似于:

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

检查模型的 SQL 字段,以将“发布”、“标签”等的正确数据分入其中。

Sorted this one out myself after a little digging.

Changed the urls.py lines to:

news_sitemaps = {
    'newssitemap': SiteappNews,
}

And changed the code in views.py to build out the relevant Google News fields from the custom module.

Yours will vary future reader (hello!), but it will be something like:

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

check your SQL fields for your models to sub in the correct data for 'publish', 'tags', etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文