Skip to content

Instantly share code, notes, and snippets.

@swizzlevixen
Created November 9, 2014 00:41
Show Gist options
  • Save swizzlevixen/595a73f339c0adbe8c4d to your computer and use it in GitHub Desktop.
Save swizzlevixen/595a73f339c0adbe8c4d to your computer and use it in GitHub Desktop.
Django Internal Links for TextFields
@swizzlevixen
Copy link
Author

Allows for an internal link markup to be saved inside markdown-formatted Textfield entries. The links can be used alone, or inside a markdown-formatted link:

{{film:alien-1979}}
{{person:douglas-trumbull}}
[The first Alien movie]({{film:alien-1979}})

...will become (at least on my website), respectively:

[*Alien* (1979)](/cinedex/film/alien-1979)
[Douglas Trumbull](/cinedex/person/douglas-trumbull)
[The first Alien movie](/cinedex/film/alien-1979)

Using the filter, the link is only looked up at display time, so if your view's URL has changed, that should automatically update with the reverse() lookup.

You could tweak the regex pattern to match whatever link markup you prefer. I also use Markdown to process my description fields, so I make the link return a markdown-formatted link instead of HTML, but you could tweak that too. If you use Markdown, you'd want to put this filter first.

So to display a description TextField with internal links, in the template would be something like this:

{{ entity.description|internal_links|markdown }}

(See the Django docs on writing your own custom filters for more details on writing and registering filters.)

Written for my movie podcast website, The Optical, and a basic version was shared as the answer to this Stack Overflow question, and the canonical version appears on my blog.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment