|
| 1 | +from django.http import HttpResponse |
1 | 2 | from django.shortcuts import render |
2 | 3 |
|
3 | | -# Create your views here. |
| 4 | +from base.models import Course, Favorite |
| 5 | +from export.helper_functions import LaTeX |
| 6 | + |
| 7 | + |
| 8 | +def generate_coursebook(request, pk, template="content/export/base.tex", context=None): |
| 9 | + """ Generates a PDF file with nametags for students in the queryset""" |
| 10 | + if context is None: |
| 11 | + context = {} |
| 12 | + user = request.user |
| 13 | + course = Course.objects.get(pk=pk) |
| 14 | + context['user'] = user |
| 15 | + context['course'] = course |
| 16 | + context['contents'] = [favorite.content for favorite in Favorite.objects.filter(user=user.profile, course=course)] |
| 17 | + (pdf, pdflatex_output, tex_template) = LaTeX.render(context, template, []) |
| 18 | + return pdf, pdflatex_output, tex_template |
| 19 | + |
| 20 | + |
| 21 | +def generate_coursebook_response(request, pk, filename='coursebook.pdf'): |
| 22 | + """ Generates a PDF file with nametags for students in the queryset and sends it to the browser""" |
| 23 | + (pdf, pdflatex_output, tex_template) = generate_coursebook(request, pk) |
| 24 | + |
| 25 | + return write_response(request, pdf, pdflatex_output, tex_template, filename) |
| 26 | + |
| 27 | + |
| 28 | +def write_response(request, pdf, pdflatex_output, tex_template, filename, content_type='application/pdf'): |
| 29 | + if not pdf: |
| 30 | + return render(request, "frontend/coursebook/rendering-error.html", {"content": pdflatex_output[0].decode("utf-8"), "tex_template": tex_template.decode("utf-8")}) |
| 31 | + response = HttpResponse(content_type=content_type) |
| 32 | + response['Content-Disposition'] = 'attachment; filename=' + filename |
| 33 | + response.write(pdf) |
| 34 | + return response |
0 commit comments