使用wkhtmltopdf和动态模板

时间:2013-06-20 08:44:12

标签: django wkhtmltopdf

我想生成django模板/视图的PDf;使用模板标签等

来自django-wkhtmltopdf的文档:

from django.conf.urls.defaults import url, patterns
from wkhtmltopdf.views import PDFTemplateView

urlpatterns = patterns('',
    url(r'^pdf/$', PDFTemplateView.as_view(template_name='my_template.html',
                                           filename='my_pdf.pdf'), name='pdf'),
)

或者他们在你看来说:

from wkhtmltopdf.views import PDFTemplateView


class MyPDF(PDFTemplateView):
    filename = 'my_pdf.pdf'
    template_name = 'my_template.html'
    cmd_options = {
        'margin-top': 3,
    }

如果这是我的观点:

def download_report(request):
    vends = Vends.objects.all()
    return render(request, 'report_template.html', {'vends':vends}) 

如何生成此VIEW的报告?不只是模板,因为那会没用?

3 个答案:

答案 0 :(得分:4)

您可以使用PDFTemplateRespone而不是render_to_response。

from wkhtmltopdf.views import PDFTemplateResponse 

然后你可以这样做:

def pdf(request, pk):   
     context = RequestContext(request)    
     template = 'test.html'

     context = {
        'variable1': variable1,
        'variable1': variable1,
        'variable1': variable1,
        'variable1': variable1

    }


    return PDFTemplateResponse(request=request, cmd_options={'disable-javascript':True}, template=template, context=context)

答案 1 :(得分:3)

看起来我已经晚了3年:)我在这里放了一个工作代码示例,作为未来需求的参考:

<强> urls.py

# here you must import MyPDF from [your-app-name].views

urlpatterns = [
  url(r'^pdf/$', MyPDF.as_view(template_name='my_template.html',
                                             filename='my_pdf.pdf'), name='pdf'),
]

<强> views.py

from wkhtmltopdf.views import PDFTemplateView

class MyPDF(PDFTemplateView):
    def get_context_data(self, **kwargs):
        context = super(MyPDF, self).get_context_data(**kwargs)
        context['foo'] = 'BAR'
        return context

<强> my_template.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
    <h1>{{ foo }}</h1>
</body>
</html>

答案 2 :(得分:1)

遇到和你一样的问题,让所有东西都能正常渲染CSS + JS,但是我也不知道如何渲染或传递数据来渲染模板然后转换。

如果有人能给出一个良好指示的提示或指示,那就太棒了。