til: datasette_redirects-for-datasette.md
This data as json
| path | topic | title | url | body | html | shot | created | created_utc | updated | updated_utc | shot_hash | slug |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| datasette_redirects-for-datasette.md | datasette | Redirects for Datasette | https://github.com/simonw/til/blob/main/datasette/redirects-for-datasette.md | I made some changes to my https://til.simonwillison.net/ site that resulted in cleaner URL designs, so I needed to setup some redirects. I configured the redirects using a one-off Datasette plugin called `redirects.py` which I dropped into the `plugins/` directory for the Datasette instance: ```python from datasette import hookimpl from datasette.utils.asgi import Response @hookimpl def register_routes(): return ( (r"^/til/til/(?P<topic>[^_]+)_(?P<slug>[^\.]+)\.md$", lambda request: Response.redirect( "/{topic}/{slug}".format(**request.url_vars), status=301 )), ("^/til/feed.atom$", lambda: Response.redirect("/tils/feed.atom", status=301)), ( "^/til/search$", lambda request: Response.redirect( "/tils/search" + (("?" + request.query_string) if request.query_string else ""), status=301, ), ), ) ``` | <p>I made some changes to my <a href="https://til.simonwillison.net/" rel="nofollow">https://til.simonwillison.net/</a> site that resulted in cleaner URL designs, so I needed to setup some redirects. I configured the redirects using a one-off Datasette plugin called <code>redirects.py</code> which I dropped into the <code>plugins/</code> directory for the Datasette instance:</p> <div class="highlight highlight-source-python"><pre><span class="pl-k">from</span> <span class="pl-s1">datasette</span> <span class="pl-k">import</span> <span class="pl-s1">hookimpl</span> <span class="pl-k">from</span> <span class="pl-s1">datasette</span>.<span class="pl-s1">utils</span>.<span class="pl-s1">asgi</span> <span class="pl-k">import</span> <span class="pl-v">Response</span> <span class="pl-en">@<span class="pl-s1">hookimpl</span></span> <span class="pl-k">def</span> <span class="pl-en">register_routes</span>(): <span class="pl-k">return</span> ( (<span class="pl-s">r"^/til/til/(?P<topic>[^_]+)_(?P<slug>[^\.]+)\.md$"</span>, <span class="pl-k">lambda</span> <span class="pl-s1">request</span>: <span class="pl-v">Response</span>.<span class="pl-en">redirect</span>( <span class="pl-s">"/{topic}/{slug}"</span>.<span class="pl-en">format</span>(<span class="pl-c1">**</span><span class="pl-s1">request</span>.<span class="pl-s1">url_vars</span>), <span class="pl-s1">status</span><span class="pl-c1">=</span><span class="pl-c1">301</span> )), (<span class="pl-s">"^/til/feed.atom$"</span>, <span class="pl-k">lambda</span>: <span class="pl-v">Response</span>.<span class="pl-en">redirect</span>(<span class="pl-s">"/tils/feed.atom"</span>, <span class="pl-s1">status</span><span class="pl-c1">=</span><span class="pl-c1">301</span>)), ( <span class="pl-s">"^/til/search$"</span>, <span class="pl-k">lambda</span> <span class="pl-s1">request</span>: <span class="pl-v">Response</span>.<span class="pl-en">redirect</span>( <span class="pl-s">"/tils/search"</span> <span class="pl-c1">+</span> ((<span class="pl-s">"?"</span> <span class="pl-c1">+</span> <span class="pl-s1">request</span>.<span class="pl-s1">query_string</span>) <span class="pl-k">if</span> <span class="pl-s1">request</span>.<span class="pl-s1">query_string</span> <span class="pl-k">else</span> <span class="pl-s">""</span>), <span class="pl-s1">status</span><span class="pl-c1">=</span><span class="pl-c1">301</span>, ), ), )</pre></div> | <Binary: 63,285 bytes> | 2020-11-25T11:53:32-08:00 | 2020-11-25T19:53:32+00:00 | 2020-11-25T11:53:32-08:00 | 2020-11-25T19:53:32+00:00 | d8510c8f4cb6c43f65afd4a6acb5d643 | redirects-for-datasette |