Skip to content

Commit e0591ac

Browse files
committed
Download resume as PDF
1 parent 93256ab commit e0591ac

File tree

5 files changed

+20
-2
lines changed

5 files changed

+20
-2
lines changed

db.sqlite3

0 Bytes
Binary file not shown.

requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,5 @@ uritemplate==4.1.1
9292
urllib3==2.2.3
9393
virtualenv==20.26.6
9494
webencodings==0.5.1
95+
weasyprint==63.0
9596
whitenoise==6.7.0

resume_cv/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
ResumeCVCreateView,
66
resume_builder,
77
UserResumeListView,
8+
download_resume,
89
)
910

1011
app_name = "resume_cv"
@@ -14,4 +15,5 @@
1415
path("resume-cv/create", ResumeCVCreateView.as_view(), name="create"),
1516
path("templates/builder/<code>", resume_builder, name="builder"),
1617
path("resumes/", UserResumeListView.as_view(), name="resumes"),
18+
path("download-as-pdf/<int:id>/", download_resume, name="export.pdf"),
1719
]

resume_cv/views.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import json
22

3+
from django.contrib.auth.decorators import login_required
34
from django.contrib.auth.mixins import LoginRequiredMixin
45
from django.http import HttpResponse, JsonResponse
56
from django.middleware.csrf import get_token
67
from django.shortcuts import render, redirect
78
from django.urls import reverse_lazy
89
from django.views import View
9-
from django.views.generic import ListView, CreateView
10+
from django.views.generic import ListView
11+
from weasyprint import HTML
1012

13+
from jobsapp.decorators import user_is_employee
1114
# Create your views here.
1215
from jobsapp.mixins import EmployeeRequiredMixin
1316
from resume_cv.forms import ResumeCvForm
@@ -113,3 +116,15 @@ class UserResumeListView(ListView):
113116

114117
def get_queryset(self):
115118
return self.model.objects.filter(user_id=self.request.user.id).order_by("-id")
119+
120+
121+
@login_required
122+
@user_is_employee
123+
def download_resume(request, id):
124+
resume = ResumeCv.objects.get(id=id)
125+
if resume:
126+
pdf_file = HTML(string=resume.content).write_pdf()
127+
response = HttpResponse(pdf_file, content_type="application/pdf")
128+
response["Content-Disposition"] = f'attachment; filename="{resume.name}.pdf"'
129+
return response
130+
return redirect("resume_cv:resumes")

templates/resumes/builder.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ <h4><b>{{ template.name }}</b></h4>
7676
let urlStore = '{% url 'resume-cv.update.builder' resume.id %}';
7777
let urlLoad = '{% url 'resume-cv.load.builder' resume.id %}';
7878
let back_button_url = "{% url 'resume_cv:templates' %}";
79-
let exportPDF_url = "";
79+
let exportPDF_url = '{% url 'resume_cv:export.pdf' resume.id %}';
8080

8181
let images_url = ['{% static 'img/1875187.jpg' %}'];
8282
let all_fonts = ['Arial', 'Verdana', 'Helvetica', 'Tahoma', 'Trebuchet MS', 'Times New Roman', 'Georgia', 'Garamond', 'Courier New', 'Brush Script MT'];

0 commit comments

Comments
 (0)