/-/static-plugins/PLUGIN_NAME/ now serves static/ from plugins

Refs #214
pull/222/head
Simon Willison 2018-04-17 19:32:48 -07:00
rodzic a5792a8c61
commit 0bb483ca5b
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 17E2DEA2588B7F52
2 zmienionych plików z 18 dodań i 0 usunięć

Wyświetl plik

@ -16,6 +16,7 @@ import json
import jinja2
import hashlib
import time
import pkg_resources
import pint
import pluggy
import traceback
@ -1294,6 +1295,12 @@ class Datasette:
app.static('/-/static/', str(app_root / 'datasette' / 'static'))
for path, dirname in self.static_mounts:
app.static(path, dirname)
# Mount any plugin static/ directories
for plugin_module in pm.get_plugins():
if pkg_resources.resource_isdir(plugin_module.__name__, 'static'):
modpath = '/-/static-plugins/{}/'.format(plugin_module.__name__)
dirpath = pkg_resources.resource_filename(plugin_module.__name__, 'static')
app.static(modpath, dirpath)
app.add_route(
DatabaseView.as_view(self),
'/<db_name:[^/\.]+?><as_json:(\.jsono?)?$>'

Wyświetl plik

@ -111,6 +111,17 @@ To learn how to upload your plugin to `PyPI <https://pypi.org/>`_ for use by
other people, read the PyPA guide to `Packaging and distributing projects
<https://packaging.python.org/tutorials/distributing-packages/>`_.
Static assets
-------------
If your plugin has a `static/` directory, Datasette will automatically configure
itself to serve those static assets from the following path::
/-/static-plugins/NAME_OF_PLUGIN_PACKAGE/yourfile.js
See `the datasette-plugin-demos repository <https://github.com/simonw/datasette-plugin-demos/tree/0ccf9e6189e923046047acd7878d1d19a2cccbb1>`_
for an example of how to create a package that includes a static folder.
Plugin hooks
------------