typogrify: Django template filters to make web typography easier
This application provides a set of custom filters for the Django template system which automatically apply various transformations to plain text in order to yield typographically-improved HTML.
Requirements
typogrify is designed to work with Django, and so requires a functioning installation of Django 0.96 or later.
- Django: http://www.djangoproject.com/
Installation
-
checkout the project into a folder called
typogrify
on your python path:git clone [email protected]:chrisdrackett/django-typogrify.git typogrify
-
Add 'typogrify' to your INSTALLED_APPS setting.
Included filters
amp
Wraps ampersands in HTML with <span class="amp"></span>
so they can be
styled with CSS. Ampersands are also normalized to &. Requires
ampersands to have whitespace or an Β on both sides. Will not
change any ampersand which has already been wrapped in this fashion.
caps
Wraps multiple capital letters in <span class="caps"></span>
so they can
be styled with CSS.
initial_quotes
Wraps initial quotes in <span class="dquo"></span>
for double quotes or
<span class="quo"></span>
for single quotes. Works inside these block
elements:
- h1, h2, h3, h4, h5, h6
- p
- li
- dt
- dd
Also accounts for potential opening inline elements: a, em, strong, span, b, i.
smartypants
- Straight quotes ( " and ' ) into βcurlyβ quote HTML entities (β | β | β | β)
- Backticks-style quotes (``like this'') into βcurlyβ quote HTML entities (β | β | β | β)
- Dashes (β--β and β---β) into n-dash and m-dash entities (β | β)
- Three consecutive dots (β...β) into an ellipsis entity (β¦)
widont
Based on Shaun Inman's PHP utility of the same name, replaces the
space between the last two words in a string with
to avoid
a final line of text with only one word.
Works inside these block elements:
- h1, h2, h3, h4, h5, h6
- p
- li
- dt
- dd
Also accounts for potential closing inline elements: a, em, strong, span, b, i.
titlecase
http://daringfireball.net/2008/05/title_case
number_suffix
wraps number suffix's in <span class="ord"></span>
so they can be styled.
fuzzydate
(uses code from http://djangosnippets.org/snippets/1347/)
Returns the date in a more human readable format:
- Today
- Yesterday
- 4 days ago
- 3 weeks ago
- in 3 years
- etc.
typogrify
Applies all of the following filters, in order:
- force_unicode (from django.utils.encoding)
- amp
- widont
- smartypants
- caps
- initial_quotes
Examples
Apply all django-typogrify
filters to template output:
{% load typogrify_tags %}
{{ blog_post.contents|typogrify }}