Google会识别XML站点地图(http://support.google.com/webmasters/bin/answer.py?hl=en&answer=178636)的<image>
标记,并且我想在我的站点地图中添加图片属性。
因此,需要这样的东西来获取cover_image,然后加载到xml文件中:
for article in articles:
print article.cover_image
我还需要为article.title
标记加载<image:title>
。
我用谷歌搜索和搜索Stack Overflow作为一个例子,但我出乎意料地找不到任何,所以帮助赞赏。
到目前为止我的文件:
## sitemaps.py ##
from django.contrib.sitemaps import Sitemap
from myproject.article.models import Article
class ArticleSitemap(Sitemap):
priority = 1.0
def items(self):
return Article.objects.order_by('-id').order_by('-pub_date')
def lastmod(self, obj):
return obj.pub_date
## urls.py ##
from myproject.sitemaps import ArticleSitemap
sitemaps = {
"article": ArticleSitemap
}
urlpatterns += patterns ('',
(r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
答案 0 :(得分:4)
可以通过
完成这是代码:
在您的类中添加这些方法 - 这些方法与django的站点地图框架中定义的方法几乎相同,但不同于它准备需要在模板中呈现的数据的方式
class MySItemapClass(Sitemap):
def item():
.........
def __get(self, name, obj, default=None):
try:
attr = getattr(self, name)
except AttributeError:
return default
if callable(attr):
return attr(obj)
return attr
def get_urls(self, page=1, site=None, protocol=None):
# Determine protocol
if self.protocol is not None:
protocol = self.protocol
if protocol is None:
protocol = 'http'
# Determine domain
if site is None:
if Site._meta.installed:
try:
site = Site.objects.get_current()
except Site.DoesNotExist:
pass
if site is None:
raise ImproperlyConfigured("To use sitemaps, either enable the sites framework or pass a Site/RequestSite object in your view.")
domain = site.domain
urls = []
for item in self.paginator.page(page).object_list:
loc = "%s://%s%s" % (protocol, domain, self.__get('location', item))
priority = self.__get('priority', item, None)
url_info = {
'item': item,
'location': loc,
'lastmod': self.__get('lastmod', item, None),
'changefreq': self.__get('changefreq', item, None),
'priority': str(priority is not None and priority or ''),
'images' : get_image(protocol, domain,item), # changed here
}
urls.append(url_info)
return urls
根据您的需要定义get_image method
定义您的自定义模板。 我看起来像这样 - 注意定义命名空间(“urlset”)
的变化<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
{% spaceless %}
{% for url in urlset %}
<url>
<loc>{{ url.location }}</loc>
{% if url.images %}
{% for image in url.images %}
<image:image>
<image:loc>{{image}}</image:loc>
</image:image>
{% endfor %}
{% endif %}
{% 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>
覆盖以使用新模板而非默认模板
url(r'^sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps,'template_name': 'seo/sitemap.xml'}),
答案 1 :(得分:0)
您可以添加一些图片before rendering the template并显示in template。我认为,最好为它单独申请(继承自django.contrib.sitemaps
)。