Source code for widgy.templatetags.widgy_tags

from django import template
from django.conf import settings
from django.utils.safestring import mark_safe

from widgy.utils import fancy_import, update_context

register = template.Library()


@register.simple_tag(takes_context=True)
[docs]def render(context, node): return node.render(context)
@register.filter
[docs]def scss_files(site): try: site = getattr(settings, site) except AttributeError: pass site = fancy_import(site) return site.scss_files
@register.filter
[docs]def js_files(site): try: site = getattr(settings, site) except AttributeError: pass site = fancy_import(site) return site.js_files
@register.filter(name='markdown') def mdown(value): import markdown value = markdown.markdown( value, extensions=['sane_lists'], safe_mode='escape', ) return mark_safe(value) @register.simple_tag(takes_context=True)
[docs]def render_root(context, owner, field_name): """ Renders `root_node` _unless_ `root_node_override` is in the context, in which case the override is rendered instead. `root_node_override` is used for stuff like preview, when a view wants to specify exactly what root node to use. """ root_node = context.get('root_node_override') field = owner._meta.get_field_by_name(field_name)[0] with update_context(context, {'root_node_override': None}): return field.render(owner, context=context, node=root_node)
@register.simple_tag def reverse_site_url(site, view_string, *args, **kwargs): """ We would be tempted to use {% url site.view kwarg=value kwarg2=value2 %} but site.view actually returns a callable (the view itself). The Django template variable resolver tries to call it, which fails and resolves `site.view' as an empty string. """ view = getattr(site, view_string) return site.reverse(view, args=args, kwargs=kwargs) @register.assignment_tag(takes_context=True) def has_change_permission(context, site, obj): return site.has_change_permission(context['request'], obj) @register.assignment_tag(takes_context=True) def has_add_permission(context, site, parent, obj): created_obj_cls = type(obj) return site.has_add_permission(context['request'], parent, created_obj_cls) @register.assignment_tag(takes_context=True) def has_delete_permission(context, site, obj): return site.has_delete_permission(context['request'], obj) @register.assignment_tag def get_action_links(owner, root_node): try: get_action_links = owner.get_action_links except AttributeError: return [] else: return get_action_links(root_node)