跳转到主要内容

为Datasette站点生成sitemap.xml

项目描述

datasette-sitemap

PyPI Changelog Tests License

为Datasette站点生成sitemap.xml

安装

在Datasette相同的环境中安装此插件。

datasette install datasette-sitemap

演示

此插件用于til.simonwillison.net的网站地图

这是用于该网站地图的配置

用法

配置后,此插件将在/sitemap.xml处添加一个网站地图,包含URL列表。

此列表使用metadata.json(或.yml)中的SQL查询定义,如下所示

{
  "plugins": {
    "datasette-sitemap": {
      "query": "select '/' || id as path from my_table"
    }
  }
}

使用metadata.yml允许使用多行SQL查询,这可以更容易地进行维护

plugins:
  datasette-sitemap:
    query: |
      select
        '/' || id as path
      from
        my_table

SQL查询必须返回一个名为path的列。此列中的值必须以/开头。它们将用于生成类似以下格式的网站地图

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/1</loc></url>
  <url><loc>https://example.com/2</loc></url>
</urlset>

您可以在SQL查询中使用UNION将多个表的结果合并,或包含要包含在索引中的文字路径

select
  '/data/table1/' || id as path
  from table1
union
select
  '/data/table2/' || id as path
  from table2
union
select
  '/about' as path

如果您的Datasette实例有多个数据库,您可以使用database配置属性配置要查询的数据库。

默认情况下,网站地图中生成的URL的域名将来自传入的请求。

您可以使用base_url设置来覆盖此设置。这不应该包含尾随斜杠。

此示例显示了这两个设置,在content数据库上运行查询并设置自定义基本URL

plugins:
  datasette-sitemap:
    query: |
      select '/plugins/' || name as path from plugins
      union
      select '/tools/' || name as path from tools
      union
      select '/news' as path
    database: content
    base_url: https://datasette.io

尝试此查询.

robots.txt

此插件添加了一个指向网站地图的robots.txt文件

Sitemap: http://example.com/sitemap.xml

您可以通过安装和配置datasette-block-robots插件来完全控制网站地图。

此插件会在您使用 datasette-block-robots 对其余 robots.txt 文件进行操作的情况下,仍然添加 Sitemap: 行。

从其他插件添加到网站地图的路径

此插件为 Datasette 添加了一个名为 sitemap_extra_paths() 的新 插件钩子,其他插件可以使用它将自定义行添加到 sitemap.xml 文件。

钩子接受以下可选参数

  • datasette:当前 Datasette 实例。您可以使用此实例执行 SQL 查询或读取插件配置设置。
  • request:表示对 /sitemap.xml 的请求的 请求对象

钩子应返回一个字符串列表,每个字符串代表要添加到网站地图的路径。每个路径都必须以 / 开头。

它还可以返回一个 async def 函数,该函数将被等待并用于生成行列表。如果您需要在钩子实现中执行 await 调用,请使用此选项。

此示例使用钩子添加了两个额外路径,其中一个来自 SQL 查询

from datasette import hookimpl

@hookimpl
def sitemap_extra_paths(datasette):
    async def inner():
        db = datasette.get_database()
        path_from_db = (await db.execute("select '/example'")).single_value()
        return ["/about", path_from_db]
    return inner

开发

要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境

cd datasette-sitemap
python3 -m venv venv
source venv/bin/activate

现在安装依赖项并测试依赖项

pip install -e '.[test]'

要运行测试

pytest

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

datasette-sitemap-1.0.tar.gz (8.5 kB 查看散列值)

上传时间

构建分布

datasette_sitemap-1.0-py3-none-any.whl (9.3 kB 查看散列值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面