Django:内置生成HTML站点地图(不是XML)的方式

时间:2013-05-02 16:10:41

标签: django sitemap

我们正在使用django sitemap framework生成搜索引擎友好的xml站点地图。它工作正常。根据您自己的需要使用和定制是很好的。

我知道我可以重写用于xml站点地图的模板,或者使用正常的数据库查询生成我们系统中所有页面的列表等等,但是很难相信没有针对这种常见问题的预配置解决方案。

我只想在普通(html)前端视图中使用与xml站点地图相同的列表。

TL; DR:

构建html站点地图的最佳/默认方式是什么,旨在帮助人们在我们的网站上找到东西(而不是机器人)?

1 个答案:

答案 0 :(得分:4)

您可以将站点地图处理器生成的xml嵌入标准html

    url(r'^sitemap/','django.contrib.sitemaps.views.sitemap', \
                      {'sitemaps'      : sitemaps,
                       'template_name' : '<yoursite>/usr_sitemap.html',
                       'mimetype'      : 'None'}),

将'mimetype'设置为none将允许您在用于生成的模板中包含html代码。这会生成包含sitemap xml代码的html。然后,您需要使用css设置样式。示例模板(usr_sitemap.html)将是:


{% extends 'base.html' %}
{% load staticfiles %}

{% block content %}  << the content section of the base.html 
<?xml version="1.0" encoding="UTF-8" type='text/css' href='{% static '<yoursite>/your_css.css' %}'?>
<urlset
  xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
  xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
{% spaceless %}
{% for url in urlset %}
  <url>
    <loc>{{ url.location }}</loc>
    {% 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 %}
    <news:news>
      <news:tag1> blabla  </news:tag1>
      <news:tag2> blabla </news:tag2>
    </news:news>
   </url>
{% endfor %}
{% endspaceless %}
</urlset>
{% endblock %}