mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Render templates/pages/x.html on 404 to /x - refs #648
This commit is contained in:
parent
d6b6c9171f
commit
c5e8cd84d3
2 changed files with 15 additions and 1 deletions
|
|
@ -13,6 +13,7 @@ from pathlib import Path
|
|||
import click
|
||||
from markupsafe import Markup
|
||||
from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PrefixLoader
|
||||
from jinja2.exceptions import TemplateNotFound
|
||||
import uvicorn
|
||||
|
||||
from .views.base import DatasetteError, ureg, AsgiRouter
|
||||
|
|
@ -658,7 +659,18 @@ class DatasetteRouter(AsgiRouter):
|
|||
path += b"?" + scope["query_string"]
|
||||
await asgi_send_redirect(send, path.decode("latin1"))
|
||||
else:
|
||||
await super().handle_404(scope, receive, send)
|
||||
# Is there a pages/* template matching this path?
|
||||
template_path = os.path.join("pages", *scope["path"].split("/")) + ".html"
|
||||
try:
|
||||
template = self.ds.jinja_env.select_template([template_path])
|
||||
except TemplateNotFound:
|
||||
template = None
|
||||
if template:
|
||||
await asgi_send_html(
|
||||
send, await template.render_async(), status=200
|
||||
)
|
||||
else:
|
||||
await super().handle_404(scope, receive, send)
|
||||
|
||||
async def handle_500(self, scope, receive, send, exception):
|
||||
title = None
|
||||
|
|
|
|||
|
|
@ -99,6 +99,8 @@ class AsgiRouter:
|
|||
new_scope = dict(scope, url_route={"kwargs": match.groupdict()})
|
||||
try:
|
||||
return await view(new_scope, receive, send)
|
||||
except NotFound:
|
||||
return await self.handle_404(scope, receive, send)
|
||||
except Exception as exception:
|
||||
return await self.handle_500(scope, receive, send, exception)
|
||||
return await self.handle_404(scope, receive, send)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue