【问题标题】:Add CSS to Pdfkit in Django?在 Django 中将 CSS 添加到 Pdfkit?
【发布时间】:2018-06-09 00:49:37
【问题描述】:

我无法将我的 CSS 添加到我的 PdfKit 代码中。

HTML 中的普通静态链接不起作用。

<link href="{% static 'css/print.css' %}" rel="stylesheet">

我在视图中看到了这种方法,但在 Django 中找不到链接 css 文件的方法。

css = 'print.css'
pdfkit.from_file('file.html', css=css)

还为 Flask 找到了这个答案 - 如何为 Django 做同样的事情?

How to link stylesheet files to pdfkit in Flask application?

谢谢。

【问题讨论】:

    标签: python django pdf pdfkit


    【解决方案1】:

    您需要添加完整路径。而不是

    <link href="{% static 'css/print.css' %}" rel="stylesheet">
    

    你会使用

    <link href="http://localhost/static/css/print.css" rel="stylesheet">
    

    您发现的第二种方法也可以,但是您需要再次使用文件的完整路径,例如:

    import os
    from django.conf import settings
    
    css = os.path.join(settings.STATIC_ROOT, 'css', 'print.css')
    pdfkit.from_file('file.html', css=css)
    

    在后一种情况下,您还需要提供file.html 的完整路径。然而,在 Django 中,您可能宁愿先将file.html 呈现为字符串,然后使用呈现的 html 来创建 PDF。比如:

    import os
    from django.conf import settings
    from django.template.loader import render_to_string
    
    t = render_to_string('file.html', {})
    css = os.path.join(settings.STATIC_ROOT, 'css', 'print.css')
    
    pdf = pdfkit.from_string(t, 'file.pdf', css=css)
    

    ...或者如果您想返回 PDF 作为响应

    from django.http import HttpResponse
    
    pdf = pdfkit.from_string(t, False, css=css)
    response = HttpResponse(pdf)
    response['Content-Type'] = 'application/pdf'
    response['Content-Disposition'] = 'attachment; filename = file.pdf'
    return response
    

    【讨论】:

    • 应该是os.path.join吗?这真的很有帮助,这就是我想要的!谢谢。使用 static_root 是否需要在进行更改时运行 collectstatic 命令?
    • 是的,os.path.join()。对不起,我打错了。是的,使用 static_root 通常意味着每次更改静态文件时都必须运行 collectstatic 命令。
    • 我在开发中作弊。我直接创建了一个指向 css 文件的链接。 css = os.path.join ( settings.CSS_ROOT, 'print.css' )。对于 CSS_ROOT 我做 CSS_ROOT = str ( APPS_DIR ( 'static/css' ) )。酷吗?
    • 没关系,如果这让您更容易开发。例如,我以与生产相同的方式设置我的开发环境以避免可能的部署问题。在开发过程中需要做更多的工作,但我更喜欢无忧部署而不是无忧开发 :)
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 2020-12-21
    • 1970-01-01
    • 2014-04-26
    • 2013-08-04
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多