class TemplateDisplay(DisplayWidget): PATTERN = 2 TEMPLATE = 3 def __init__(self, widget, template, template_format=2, marked_safe=True, **kwargs): self.marked_safe = marked_safe if template_format == self.PATTERN: self.template = template self.render = self._render_pattern else: self.template = Template(template) self.render = self._render_template self.widget = widget super(TemplateDisplay, self).__init__(**kwargs) def _render_pattern(self, name, value, attrs=None, renderer=None): result = self.widget.render(name, value, attrs, renderer) if self.widget else value if self.is_null(value): return result or "" if result is None: return "" if self.marked_safe: return mark_safe(self.template.format(result)) else: return self.template.format(result) def _render_template(self, name, value, attrs=None, renderer=None): result = self.widget.render(name, value, attrs, renderer) if self.widget else value if not value: return result or "" if result is None: return "" if self.marked_safe: return mark_safe(self.template.render(Context({"object": result}))) else: return self.template.render(Context({"object": result}))