在Django中的Wkhtmltopdf中渲染静态文件

qhhrdooz  于 2023-10-21  发布在  Go
关注(0)|答案(2)|浏览(150)

我已经遵循了太多的答案,但我需要更多的解释这个主题,因为我想知道它的根本原因。
我正在尝试使用wkhtmltopdf创建pdf。
这是我的设置文件看起来像:
Settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

引用静态文件的URL为:

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

<link rel="stylesheet" href="/static/css/template_pdf.css" type="text/css" />

<link rel="stylesheet" href="file:///static/css/template_pdf.css" type="text/css" />


我也用了这个:https://gist.github.com/renyi/f02b4322590e9288ac679545df4748d3
并提供URL为:

<link rel='stylesheet' type='text/css' href='{{ STATIC_URL }}static/css/template_pdf.css' />

但我理解的问题是,除了最后一个之外,上述所有内容在渲染视图时都可以完美地工作:

def view_pdf(request):
    """View function for home page of site."""

    context= {'title': 'Hello World!'}

    # Render the HTML template index.html with the data in the context variable
    return render(request, 'pdf/quotation.html', context=context)

但是使用wkhtmltopdf创建pdf时,它特别需要像这样指定url:

<link rel="stylesheet" href="http:localhost:8000/static/css/template_pdf.css" type="text/css" />

我知道我在静态文件中缺少了一些东西。但我想知道为什么它与渲染模板,而不是与生成PDF使用wkhtmltopdf。我不认为这是一个好主意,直接把域名内引用的网址。
一个详细的解决方案将是有帮助的,因为我是非常新的django。
我也试过这个答案,但没有效果:Django wkhtmltopdf don't reading static files

kx5bkwkv

kx5bkwkv1#

在调试模式下运行时,我在模板中显式添加了http://localhost:8000
在模板中:

<link rel="stylesheet" href="{% if debug %}http://localhost:8000{% endif %}{% static '/css/template_pdf.css' %}" type="text/css" />

我将debug添加到上下文(编辑:根据Sara的评论,django模板已经知道debug变量,所以不需要将其添加到上下文中。

from django.conf import settings

def view_pdf(request):
    """View function for home page of site."""

    context= {
        'debug': settings.DEBUG,
        'title': 'Hello World!'
    }

    # Render the HTML template index.html with the data in the context variable
    return render(request, 'pdf/quotation.html', context=context)
xj3cbfub

xj3cbfub2#

在您的settings.py

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

WKHTMLTOPDF_CMD = '/usr/local/bin/wkhtmltopdf'

要在你的模板中渲染静态文件,django提供static标签。你可以用它作为

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

另外,请确保您的urls.py中包含此内容

from django.conf import settings
if settings.DEBUG:
    from django.conf.urls.static import static
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

最后不要忘记运行collectstatic命令

相关问题