为Datasette站点生成sitemap.xml
项目描述
datasette-sitemap
为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