2013-06-20 55 views
3

我想生成一個django模板/視圖的PDF;使用templatetags等使用wkhtmltopdf動態模板

從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的報告作爲其呈現?不只是模板,因爲這是沒用的?

+0

這是不可能的?沒人知道? – Harry

+0

是否使用DJANGO-wkhtmltopdf的要求?普通視圖和python-wkhtmltopdf可以完成這項工作。 – allcaps

回答

1

和你的問題一樣,所有的東西都用渲染CSS + JS,但我也無法/不知道如何渲染或傳遞數據來獲取模板然後轉換。

如果有人可以給出一個好的方向提示或指向,它會很棒。

+0

我也有同樣的問題:(http://stackoverflow.com/questions/18232691/creating-pdfs-with-django-wkhtmltopdf – Sevenearths

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年:)我反正放在這裏工作的代碼示例,爲未來的需求參考:

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>