gpt4 book ai didi

django - 在 Django 中将图像字段添加到 XML 站点地图

转载 作者:行者123 更新时间:2023-12-03 10:57:40 25 4
gpt4 key购买 nike

Google 识别出 <image> XML 站点地图 ( http://support.google.com/webmasters/bin/answer.py?hl=en&answer=178636 ) 的标记,我想在我的站点地图中包含一个图像属性。

所以,需要这样的东西来获取cover_image,然后加载到xml文件中:

for article in articles:
print article.cover_image

我还需要 article.title也为 <image:title> 加载标签。

我已经在 Google 上搜索并搜索了 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})

最佳答案

它可以通过

  • 在继承的类中重新定义 get_urls 方法(添加图像信息)
  • 将默认模板更改为渲染图像信息所需的模板

  • 这是代码:
  • 在您的类中添加这些方法 - 这些方法与 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'}),
  • 关于django - 在 Django 中将图像字段添加到 XML 站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10363710/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com