Django-tex is a simple Django app to render LaTeX templates and compile them into PDF files.
Django-tex requires a local LaTeX installation and uses the jinja2 templating engine for template rendering.
- Add "django_tex" to your
INSTALLED_APPS
setting:
INSTALLED_APPS = [
...
'django_tex',
]
- Create a LaTeX template in your template directory:
# test.tex
\documentclass{article}
\begin{document}
\section{ {{- foo -}} }
\end{document}
- Use "compile_template_to_pdf" in your code to get the PDF file as a bytes object:
from django_tex.core import compile_template_to_pdf
template_name = 'test.tex'
context = {'foo': 'Bar'}
PDF = compile_template_to_pdf(template_name, context)
Or use render_to_pdf
to generate a HTTPResponse containing the PDF file:
from django_tex.views import render_to_pdf
def view(request):
template_name = 'test.tex'
context = {'foo': 'Bar'}
return render_to_pdf(template_name, context, filename='test.pdf')
Since django-tex uses jinja, you can use jinja's whitespace control in
LaTeX templates. For example, \section{ {{ foo }} }
would be rendered as
\section{ Bar }
with the above context; \section{ {{- foo -}} }
, however,
gets rendered nicely as \section{Bar}
.
Django's built-in filters are available. So you can use {{ foo|date('d. F Y') }}
to get 1. Januar 2018
, for instance.
Further, django-tex adds the custom filter localize
to the jinja environment.
This runs its input through django.utils.formats.localize_input
to
create a localized representation. The output depends on the USE_L10N
and LANGUAGE_CODE
settings. Use the filter like this: {{ foo|localize }}
.
If you want to convert linebreaks into LaTeX linebreaks (\\
), use the linebreaks
filter ({{ foo | linebreaks }}
).