Django 模型 HTML。然后,HTML转PDF
Django models to HTML. Then, HTML to PDF
我正在尝试将 Django 模型数据(管理端数据)导出到 PDF 文件中。
首先,我创建了一个 HTML 文件来渲染来自模型的数据。
The HTML file I created
它成功运行并正确显示了来自模型的数据。
Successfully worked(我为它创建了一个url来检查它是否工作)
然后我尝试将相同的 html 文件呈现为 PDF。我 运行 服务器,我生成了一个 pdf 文件。
PDF file 我预计它也会显示数据。但它只显示 table 边框。
您可以在第一张照片中看到我的文件夹和名称。
我认为添加此代码就足够了。如果您需要完整代码,请告诉我。
这是我的 views.py 来自 app.
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
class ViewPDF(View):
def get(self, request, *args, **kwargs):
pdf = render_to_pdf('app/pdf_template.html')
return HttpResponse(pdf, content_type='application/pdf')
我不能使用相同的 html 文件来获取 pdf 格式的数据吗?
谁能告诉我我做错了什么?
pdf_template.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>This is my first pdf</title>
</head>
<body>
<center>
<h2>User Table</h2>
<table border="1">
<tr>
<th>Username</th>
<th>E-mail</th>
<th>Country</th>
<th>City</th>
</tr>
{% for result in user %}
<tr>
<td>
{{result.username}}
</td>
<td>
{{result.email}}
</td>
<td>
{{result.country}}
</td>
<td>
{{result.city}}
</td>
</tr>
{% endfor %}
</table>
</center>
</body>
</html>
我看到您使用 'user' 作为 'for' 条件的列表,但您从未将其添加到您的上下文中。我认为它工作正常但没有数据显示
更新:
在 'render_to_pdf' 你得到 'context_dict' 参数来渲染你的模板。但是当你调用你的函数时你永远不会传递这个参数。这就是为什么除了边界你什么都看不到的原因。因为没有数据
更新 2:在这一行中:
pdf = render_to_pdf('app/pdf_template.html')
只需添加上下文字典。像这样:
pdf = render_to_pdf('app/pdf_template.html',context)
我得到了正确的输出。我将此作为答案发布,以便它也可以用于其他人。
class ViewPDF(View):
def get(self, request, *args, **kwargs):
context={}
context['user'] =user.objects.all()
pdf = render_to_pdf('app/pdf_template.html',context_dict=context)
return HttpResponse(pdf, content_type='application/pdf')
在views.py中我修改了上面的代码。
我正在尝试将 Django 模型数据(管理端数据)导出到 PDF 文件中。 首先,我创建了一个 HTML 文件来渲染来自模型的数据。 The HTML file I created
它成功运行并正确显示了来自模型的数据。 Successfully worked(我为它创建了一个url来检查它是否工作)
然后我尝试将相同的 html 文件呈现为 PDF。我 运行 服务器,我生成了一个 pdf 文件。 PDF file 我预计它也会显示数据。但它只显示 table 边框。
您可以在第一张照片中看到我的文件夹和名称。 我认为添加此代码就足够了。如果您需要完整代码,请告诉我。 这是我的 views.py 来自 app.
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
class ViewPDF(View):
def get(self, request, *args, **kwargs):
pdf = render_to_pdf('app/pdf_template.html')
return HttpResponse(pdf, content_type='application/pdf')
我不能使用相同的 html 文件来获取 pdf 格式的数据吗? 谁能告诉我我做错了什么?
pdf_template.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>This is my first pdf</title>
</head>
<body>
<center>
<h2>User Table</h2>
<table border="1">
<tr>
<th>Username</th>
<th>E-mail</th>
<th>Country</th>
<th>City</th>
</tr>
{% for result in user %}
<tr>
<td>
{{result.username}}
</td>
<td>
{{result.email}}
</td>
<td>
{{result.country}}
</td>
<td>
{{result.city}}
</td>
</tr>
{% endfor %}
</table>
</center>
</body>
</html>
我看到您使用 'user' 作为 'for' 条件的列表,但您从未将其添加到您的上下文中。我认为它工作正常但没有数据显示
更新: 在 'render_to_pdf' 你得到 'context_dict' 参数来渲染你的模板。但是当你调用你的函数时你永远不会传递这个参数。这就是为什么除了边界你什么都看不到的原因。因为没有数据
更新 2:在这一行中:
pdf = render_to_pdf('app/pdf_template.html')
只需添加上下文字典。像这样:
pdf = render_to_pdf('app/pdf_template.html',context)
我得到了正确的输出。我将此作为答案发布,以便它也可以用于其他人。
class ViewPDF(View):
def get(self, request, *args, **kwargs):
context={}
context['user'] =user.objects.all()
pdf = render_to_pdf('app/pdf_template.html',context_dict=context)
return HttpResponse(pdf, content_type='application/pdf')
在views.py中我修改了上面的代码。