4

我想生成一个 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 的报告作为其呈现?不只是模板,因为那没用?

4

3 回答 3

5

您可以使用 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)
于 2014-08-29T19:57:17.547 回答
4

看起来我迟到了 3 年 :) 无论如何我在这里放了一个工作代码示例,作为未来需要的参考:

网址.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'),
]

视图.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>
于 2017-03-31T09:26:05.537 回答
1

遇到与您相同的问题,一切都可以正常渲染 CSS + JS,但我也无法/不知道如何渲染或传递数据以获取模板渲染然后转换。

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

于 2013-06-21T08:09:20.433 回答