Good afternoon dear stackoverflow friends I have this doubt, I'm trying to print pdfs from django with the xhtml2pdf library for my projects in django2.0 , I follow a tutorial that I find interesting that the source is:
My error on the screen is as follows:
__ init __ () takes 1 positional argument but 2 were given
I follow the tutorial from up there to the letter, maybe it's the Django version but I'll put my code here below
views.py
from django.http import HttpResponse
from django.views.generic import View
from .pdf_generator import render_to_pdf
class GeneratePdf(View):
def get(self, request, *args, **kwargs):
data = {}
pdf = render_to_pdf('pdf/invoice.html', data)
return HttpResponse(pdf, content_type='application/pdf')
pdf_generator.py
from io import BytesIO
from django.http import HttpResponse
from django.template.loader import get_template
from xhtml2pdf import pisa
def render_to_pdf(template_src, context_dict={}):
template = get_template(template_src)
html = template.render(context_dict)
result = BytesIO()
pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result)
if not pdf.err:
return HttpResponse(result.getvalue(), content_type='application/pdf')
return None
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('pdf/', views.GeneratePdf),
]
pdf-generator.html
{% extends "../base.html" %}
{% block content_style %}
body {
font-family: "Helvetica", "sans-serif";
color: #333333;
}
{% endblock content_style %}
{% block content %}
<h1>Hello world!</h1>
<h2>Welcome to the pdf!</h2>
{% endblock content %}
just in case I leave you something called the traceback :
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/cv/pdf/
Django Version: 2.0
Python Version: 3.6.5
Installed Applications:
['main.apps.SuitConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'phonenumber_field',
'django_countries',
'material',
'material.frontend',
'cv']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'material.frontend.middleware.SmoothNavigationMiddleware']
Traceback:
File "/usr/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
35. response = get_response(request)
File "/usr/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3.6/site-packages/django/core/handlers/base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
Exception Type: TypeError at /cv/pdf/
Exception Value: __init__() takes 1 positional argument but 2 were given
Excuse me so much code is that I want to be as explicit as possible because I really do not know what to do I have tried several libraries and it is always this error which persists.