diff --git a/datasette/app.py b/datasette/app.py index b8e27f3c..321e4a92 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -1158,7 +1158,7 @@ class DatasetteRouter: await template.render_async( dict( info, - base_url=self.ds.config("base_url"), + urls=self.ds.urls, app_css_hash=self.ds.app_css_hash(), ) ), @@ -1270,19 +1270,26 @@ class Urls: def __init__(self, ds): self.ds = ds + def path(self, path): + if path.startswith("/"): + path = path[1:] + return self.ds.config("base_url") + path + def instance(self): - return self.ds.config("base_url") + return self.path("") def static(self, path): - return "{}-/static/{}".format(self.instance(), path) + return self.path("-/static/{}".format(path)) + + def logout(self): + return self.path("-/logout") def database(self, database): db = self.ds.databases[database] - base_url = self.ds.config("base_url") if self.ds.config("hash_urls") and db.hash: - return "{}{}-{}".format(base_url, database, db.hash[:HASH_LENGTH]) + return self.path("{}-{}".format(database, db.hash[:HASH_LENGTH])) else: - return "{}{}".format(base_url, database) + return self.path(database) def table(self, database, table): return "{}/{}".format(self.database(database), urllib.parse.quote_plus(table)) diff --git a/datasette/templates/allow_debug.html b/datasette/templates/allow_debug.html index 8ec03a5a..0f1b30f0 100644 --- a/datasette/templates/allow_debug.html +++ b/datasette/templates/allow_debug.html @@ -35,7 +35,7 @@ p.message-warning {

Use this tool to try out different actor and allow combinations. See Defining permissions with "allow" blocks for documentation.

-
+

diff --git a/datasette/templates/base.html b/datasette/templates/base.html index fd4cf504..84708325 100644 --- a/datasette/templates/base.html +++ b/datasette/templates/base.html @@ -2,7 +2,7 @@ {% block title %}{% endblock %} - + {% for url in extra_css_urls %} @@ -18,7 +18,7 @@ {% if actor %}
{{ display_actor(actor) }}{% if show_logout %} · - + {% endif %} diff --git a/datasette/templates/error.html b/datasette/templates/error.html index 46573f30..5c651d4e 100644 --- a/datasette/templates/error.html +++ b/datasette/templates/error.html @@ -4,7 +4,7 @@ {% block nav %}

- home + home

{{ super() }} {% endblock %} diff --git a/datasette/views/database.py b/datasette/views/database.py index 772271c4..74509278 100644 --- a/datasette/views/database.py +++ b/datasette/views/database.py @@ -102,6 +102,7 @@ class DatabaseView(DataView): return ( { "database": database, + "path": self.ds.urls.database(database), "size": db.size, "tables": tables, "hidden_count": len([t for t in tables if t["hidden"]]), diff --git a/docs/internals.rst b/docs/internals.rst index d02b4c67..95bdfc68 100644 --- a/docs/internals.rst +++ b/docs/internals.rst @@ -375,6 +375,14 @@ The ``datasette.urls`` object contains methods for building URLs to pages within ``datasette.urls.instance()`` Returns the URL to the Datasette instance root page. This is usually ``"/"`` +``datasette.urls.path(path)`` + Takes a path and returns the full path, taking ``base_url`` into account. + + For example, ``datasette.urls.path("-/logout")`` will return the path to the logout page, which will be ``"/-/logout"`` by default or ``/prefix-path/-/logout`` if ``base_url`` is set to ``/prefix-path/`` + +``datasette.urls.logout()`` + Returns the URL to the logout page, usually ``"/-/logout"``. + ``datasette.urls.database(database_name)`` Returns the URL to a database page, for example ``"/fixtures"``