Merge pull request #915 from SchrodingersGat/tex-response

Tex response
This commit is contained in:
Oliver 2020-08-20 14:14:24 +10:00 committed by GitHub
commit 4f1b469cee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,6 +8,8 @@ from __future__ import unicode_literals
import os
import sys
import datetime
from django.db import models
from django.conf import settings
@ -29,11 +31,22 @@ except OSError as err:
if settings.LATEX_ENABLED:
try:
from django_tex.shortcuts import render_to_pdf
from django_tex.core import render_template_with_context
from django_tex.exceptions import TexError
except OSError as err:
print("OSError: {e}".format(e=err))
print("You may not have a working LaTeX toolchain installed?")
sys.exit(1)
from django.http import HttpResponse
class TexResponse(HttpResponse):
def __init__(self, content, filename=None):
super().__init__(content_type="application/txt")
self["Content-Disposition"] = 'filename="{}"'.format(filename)
self.write(content)
def rename_template(instance, filename):
@ -150,11 +163,20 @@ class ReportTemplateBase(models.Model):
context = self.get_context_data(request)
context['request'] = request
context['user'] = request.user
context['datetime'] = datetime.datetime.now()
if self.extension == '.tex':
# Render LaTeX template to PDF
if settings.LATEX_ENABLED:
return render_to_pdf(request, self.template_name, context, filename=filename)
# Attempt to render to LaTeX template
# If there is a rendering error, return the (partially rendered) template,
# so at least we can debug what is going on
try:
rendered = render_template_with_context(self.template_name, context)
return render_to_pdf(request, self.template_name, context, filename=filename)
except TexError:
return TexResponse(rendered, filename="error.tex")
else:
return ValidationError("Enable LaTeX support in config.yaml")
elif self.extension in ['.htm', '.html']: