为 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/1loc>url>
<url><loc>https://example.com/2loc>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.com.cn
此插件添加一个指向站点地图的 robots.txt
文件
Sitemap: http://example.com/sitemap.xml
您可以通过安装和配置 datasette-block-robots 插件来完全控制站点地图。
即使您使用 datasette-block-robots
来处理其他 robots.txt
文件内容,此插件也会添加 Sitemap:
行。
此插件向 Datasete 添加了一个新的插件钩子,名为 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