Files
mayan-edms/mayan/apps/templating/views.py
Roberto Rosario ba7284a9ae Move TemplateField JS code to a Media class
Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
2019-11-12 01:14:37 -04:00

63 lines
2.1 KiB
Python

from __future__ import absolute_import, unicode_literals
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.template import Context, Template, TemplateSyntaxError
from django.urls import reverse
from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import FormView
from mayan.apps.common.http import URL
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.models import Document
from .forms import DocumentTemplateSandboxForm
from .permissions import permission_template_sandbox
class DocumentTemplateSandboxView(ExternalObjectMixin, FormView):
external_object_class = Document
external_object_permission = permission_template_sandbox
form_class = DocumentTemplateSandboxForm
def form_valid(self, form):
path = reverse(
viewname='templating:document_template_sandbox',
kwargs={'pk': self.external_object.pk}
)
url = URL(
path=path, query={'template': form.cleaned_data['template']}
)
return HttpResponseRedirect(redirect_to=url.to_string())
def get_initial(self):
template_string = self.request.GET.get('template', '')
try:
context = Context(
{'document': self.external_object}
)
template = Template(template_string=template_string)
result = template.render(context=context)
except TemplateSyntaxError as exception:
result = ''
error_message = _(
'Template error; %(exception)s'
) % {
'exception': exception
}
messages.error(request=self.request, message=error_message)
return {
'template': template_string, 'result': result
}
def get_extra_context(self):
return {
'object': self.external_object,
'title': _('Template sandbox for: %s') % self.external_object
}
def get_form_extra_kwargs(self):
return {'model': Document, 'model_variable': 'document'}