home / tils / til

Menu
  • GraphQL API

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&lt;topic&gt;[^_]+)_(?P&lt;slug&gt;[^\.]+)\.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
Powered by Datasette · How this site works · Code of conduct