django-orchestra/orchestra/templatetags/utils.py

99 lines
2.4 KiB
Python
Raw Normal View History

2015-04-24 14:03:42 +00:00
import re
2014-05-08 16:59:35 +00:00
from django import template
2015-04-24 14:03:42 +00:00
from django.contrib.contenttypes.models import ContentType
2014-05-08 16:59:35 +00:00
from django.core.urlresolvers import reverse, NoReverseMatch
from django.forms import CheckboxInput
2015-04-24 14:03:42 +00:00
from django.template.base import Node
2014-05-08 16:59:35 +00:00
from orchestra import get_version
2014-09-18 15:07:39 +00:00
from orchestra.admin.utils import change_url
2014-10-17 10:04:47 +00:00
from orchestra.utils.apps import isinstalled
2014-05-08 16:59:35 +00:00
register = template.Library()
2014-10-17 10:04:47 +00:00
@register.filter(name='isinstalled')
def app_is_installed(app_name):
return isinstalled(app_name)
2014-05-08 16:59:35 +00:00
@register.simple_tag(name="version")
2014-07-09 16:17:43 +00:00
def orchestra_version():
2014-05-08 16:59:35 +00:00
return get_version()
@register.simple_tag(name="admin_url", takes_context=True)
def rest_to_admin_url(context):
""" returns the admin equivelent url of the current REST API view """
view = context['view']
2015-04-23 14:34:04 +00:00
queryset = getattr(view, 'queryset', None)
model = queryset.model if queryset else None
2014-05-08 16:59:35 +00:00
url = 'admin:index'
args = []
if model:
2015-04-23 14:34:04 +00:00
opts = model._meta
url = 'admin:%s_%s' % (opts.app_label, opts.model_name)
pk = view.kwargs.get(view.lookup_field)
2014-05-08 16:59:35 +00:00
if pk:
url += '_change'
args = [pk]
else:
url += '_changelist'
try:
return reverse(url, args=args)
except NoReverseMatch:
return reverse('admin:index')
2015-04-24 14:03:42 +00:00
class OneLinerNode(Node):
def __init__(self, nodelist):
self.nodelist = nodelist
def render(self, context):
line = self.nodelist.render(context).replace('\n', ' ')
return re.sub(r'\s\s+', '', line)
@register.tag
def oneliner(parser, token):
nodelist = parser.parse(('endoneliner',))
parser.delete_first_token()
return OneLinerNode(nodelist)
2014-05-08 16:59:35 +00:00
@register.filter
def size(value, length):
value = str(value)[:int(length)]
num_spaces = int(length) - len(str(value))
return str(value) + (' '*num_spaces)
2014-09-10 16:53:09 +00:00
@register.filter
2014-05-08 16:59:35 +00:00
def is_checkbox(field):
return isinstance(field.field.widget, CheckboxInput)
2014-09-10 16:53:09 +00:00
2015-04-24 14:03:42 +00:00
@register.filter
def content_type_id(label):
app_label, model = label.split('.')
return ContentType.objects.filter(app_label=app_label, model=model).values_list('id', flat=True)[0]
2015-04-26 13:53:00 +00:00
@register.filter
def split(value, sep=' '):
parts = value.split(sep)
return (parts[0], sep.join(parts[1:]))
2014-09-10 16:53:09 +00:00
@register.filter
2014-10-20 19:22:18 +00:00
def admin_url(obj):
2014-09-18 15:07:39 +00:00
return change_url(obj)
2014-11-21 17:18:59 +00:00
@register.filter
def isactive(obj):
return getattr(obj, 'is_active', True)
2015-04-24 14:03:42 +00:00