id,page,ref,title,content,breadcrumbs,references
writing_plugins:writing-plugins-building-urls,writing_plugins,writing-plugins-building-urls,Building URLs within plugins,"Plugins that define their own custom user interface elements may need to link to other pages within Datasette.
This can be a bit tricky if the Datasette instance is using the base_url configuration setting to run behind a proxy, since that can cause Datasette's URLs to include an additional prefix.
The datasette.urls object provides internal methods for correctly generating URLs to different pages within Datasette, taking any base_url configuration into account.
This object is exposed in templates as the urls variable, which can be used like this:
Back to the Homepage
See datasette.urls for full details on this object.","[""Writing plugins""]",[]
writing_plugins:writing-plugins-configuration,writing_plugins,writing-plugins-configuration,Writing plugins that accept configuration,"When you are writing plugins, you can access plugin configuration like this using the datasette plugin_config() method. If you know you need plugin configuration for a specific table, you can access it like this:
plugin_config = datasette.plugin_config(
""datasette-cluster-map"", database=""sf-trees"", table=""Street_Tree_List""
)
This will return the {""latitude_column"": ""lat"", ""longitude_column"": ""lng""} in the above example.
If there is no configuration for that plugin, the method will return None .
If it cannot find the requested configuration at the table layer, it will fall back to the database layer and then the root layer. For example, a user may have set the plugin configuration option inside datasette.yaml like so:
[[[cog
from metadata_doc import metadata_example
metadata_example(cog, {
""databases"": {
""sf-trees"": {
""plugins"": {
""datasette-cluster-map"": {
""latitude_column"": ""xlat"",
""longitude_column"": ""xlng""
}
}
}
}
})
]]]
[[[end]]]
In this case, the above code would return that configuration for ANY table within the sf-trees database.
The plugin configuration could also be set at the top level of datasette.yaml :
[[[cog
metadata_example(cog, {
""plugins"": {
""datasette-cluster-map"": {
""latitude_column"": ""xlat"",
""longitude_column"": ""xlng""
}
}
})
]]]
[[[end]]]
Now that datasette-cluster-map plugin configuration will apply to every table in every database.","[""Writing plugins""]",[]
writing_plugins:writing-plugins-tracing,writing_plugins,writing-plugins-tracing,Tracing plugin hooks,"The DATASETTE_TRACE_PLUGINS environment variable turns on detailed tracing showing exactly which hooks are being run. This can be useful for understanding how Datasette is using your plugin.
DATASETTE_TRACE_PLUGINS=1 datasette mydb.db
Example output:
actor_from_request:
{ 'datasette': ,
'request': }
Hook implementations:
[ >,
>,
>]
Results:
[{'id': 'root'}]","[""Writing plugins""]",[]