Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ojengwa/a60d7bdcaa7468bf5d85fe99b99fc3d5 to your computer and use it in GitHub Desktop.
Save ojengwa/a60d7bdcaa7468bf5d85fe99b99fc3d5 to your computer and use it in GitHub Desktop.
Useful django template tags and filters
# coding: utf-8
import json
from django import template
from django.utils.dateparse import parse_datetime
from django.utils.html import mark_safe
register = template.Library()
@register.filter
def get_range(value, start_from=0):
"""
Filter - returns a list containing range made from given value
Usage (in template):
<ul>{% for i in 3|get_range %}
<li>{{ i }}. Do something</li>
{% endfor %}</ul>
Results with the HTML:
<ul>
<li>0. Do something</li>
<li>1. Do something</li>
<li>2. Do something</li>
</ul>
Instead of 3 one may use the variable set in the views
"""
return range(start_from, value)
@register.filter('parse_datetime')
def parse_datetime_filter(date_string):
"""
Return a datetime corresponding to date_string, parsed according to DATETIME_INPUT_FORMATS
For example, to re-display a date string in another format::
{{ "01/01/1970"|parse_datetime|date:"F jS, Y" }}
"""
try:
return parse_datetime(date_string)
except Exception:
return date_string
@register.filter
def toJSON(value):
return mark_safe(json.dumps(value))
@register.filter
def addcss(field, arg):
"""
Add class to field in templates
{{ field|addcss:'my-class' }}
"""
return field.as_widget(attrs={'class': arg})
# coding: utf-8
from django import template
from django.conf import settings
from django.contrib.staticfiles.storage import staticfiles_storage
from django.template import Node
register = template.Library()
@register.simple_tag
def settings_value(name):
return getattr(settings, name, "")
@register.simple_tag
def javascript(filename, type='text/javascript'):
"""A simple shortcut to render a ``script`` tag to a static javascript file"""
if '?' in filename and len(filename.split('?')) is 2:
filename, params = filename.split('?')
return '<script type="%s" src="%s?%s"></script>' % (type, staticfiles_storage.url(filename), params)
else:
return '<script type="%s" src="%s"></script>' % (type, staticfiles_storage.url(filename))
@register.simple_tag
def js(filename, type='text/javascript'):
"""A simple shortcut"""
return javascript(filename, type=type)
@register.simple_tag
def css(filename):
"""A simple shortcut to render a ``link`` tag to a static CSS file"""
return '<link rel="stylesheet" type="text/css" href="%s" />' % staticfiles_storage.url(filename)
@register.simple_tag
def app_css(app_name, file_path, *args, **kwargs):
"""
A simple shortcut to render a ``link`` tag to a django app related css file
{% app_css 'customer' 'edit-page.css' %}
"""
path = '{version}/{app_name}/css/{file_path}'.format(
version=settings.TEMPLATE_NAME,
app_name=app_name,
file_path=file_path
)
return css(path)
@register.simple_tag
def app_js(app_name, file_path, *args, **kwargs):
"""
A simple shortcut to render a ``script`` tag to a django app related js file
{% app_js 'customer' 'edit-page.js' %}
"""
path = '{version}/{app_name}/js/{file_path}'.format(
version=settings.TEMPLATE_NAME,
app_name=app_name,
file_path=file_path
)
return js(path)
# http://kuttler.eu/code/django-almost-spaceless-template-tag/
class AlmostSpacelessNode(Node):
def __init__(self, nodelist):
self.nodelist = nodelist
def render(self, context):
return self.remove_whitespace(self.nodelist.render(context).strip())
def remove_whitespace(self, value):
value = re.sub(r'\n', ' ', value)
value = re.sub(r'\s+', ' ', value)
return value
@register.tag(name='almostspaceless')
def spaceless(parser, token):
"""
Remove all whitespace except for one space from content
"""
nodelist = parser.parse(('endalmostspaceless',))
parser.delete_first_token()
return AlmostSpacelessNode(nodelist)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment