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中我修改了上面的代码。