Django WeasyPrint CBV
项目描述
一个使用WeasyPrint生成PDF响应的Django基于类的视图。
安装
使用pip进行安装和更新
pip install -U django-weasyprint
WeasyPrint作为此包的依赖项自动安装。如果您遇到任何问题,请务必查看他们的安装说明以获取帮助!
使用方法
可以将 WeasyTemplateView 作为基于类的视图基类,或者在一个 TemplateView(或其子类)上使用混合类 WeasyTemplateResponseMixin。
示例
# views.py
import functools
from django.conf import settings
from django.views.generic import DetailView
from django_weasyprint import WeasyTemplateResponseMixin
from django_weasyprint.views import WeasyTemplateResponse
from django_weasyprint.utils import django_url_fetcher
class MyDetailView(DetailView):
# vanilla Django DetailView
template_name = 'mymodel.html'
def custom_url_fetcher(url, *args, **kwargs):
# rewrite requests for CDN URLs to file path in STATIC_ROOT to use local file
cloud_storage_url = 'https://s3.amazonaws.com/django-weasyprint/static/'
if url.startswith(cloud_storage_url):
url = 'file://' + url.replace(cloud_storage_url, settings.STATIC_URL)
return django_url_fetcher(url, *args, **kwargs)
class CustomWeasyTemplateResponse(WeasyTemplateResponse):
# customized response class to pass a kwarg to URL fetcher
def get_url_fetcher(self):
# disable host and certificate check
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
return functools.partial(custom_url_fetcher, ssl_context=context)
class PrintView(WeasyTemplateResponseMixin, MyDetailView):
# output of MyDetailView rendered as PDF with hardcoded CSS
pdf_stylesheets = [
settings.STATIC_ROOT + 'css/app.css',
]
# show pdf in-line (default: True, show download dialog)
pdf_attachment = False
# custom response class to configure url-fetcher
response_class = CustomWeasyTemplateResponse
class DownloadView(WeasyTemplateResponseMixin, MyDetailView):
# suggested filename (is required for attachment/download!)
pdf_filename = 'foo.pdf'
# set PDF variant to 'pdf/ua-1' (see weasyprint.DEFAULT_OPTIONS)
pdf_options = {'pdf_variant': 'pdf/ua-1'}
class DynamicNameView(WeasyTemplateResponseMixin, MyDetailView):
# dynamically generate filename
def get_pdf_filename(self):
return 'foo-{at}.pdf'.format(
at=timezone.now().strftime('%Y%m%d-%H%M'),
)
<!-- mymodel.html -->
<!doctype html>
<html>
<head>
<!-- Use "static" template tag and configure STATIC_URL as usual. -->
<link rel="stylesheet" href="{% static 'css/app.css' %}" />
</head>
<body>
Hello PDF-world!
</body>
</html>
设置
默认情况下,WeasyTemplateResponse 会自动使用 Django 的 request.build_absolute_uri() 确定用于 weasyprint.HTML 和 weasyprint.CSS 的 base_url。
要禁用此功能,请将 WEASYPRINT_BASEURL 设置为固定值,例如。
# Disable prefixing relative URLs with request.build_absolute_uri().
# Instead, handle them as absolute file paths.
WEASYPRINT_BASEURL = '/'
变更日志
查看 CHANGELOG.md
链接
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分发
django-weasyprint-2.3.0.tar.gz (13.2 kB 查看哈希值)