Визуализация статического файла в Wkhtmltopdf в Django - PullRequest
0 голосов
/ 10 ноября 2018

Я получил слишком много ответов на этот вопрос, но мне нужно больше объяснений на эту тему, так как я хочу знать причину этого.

Я пытаюсь создать PDF с помощью wkhtmltopdf.

Это мои файлы настроек выглядят так:

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)

Но для создания pdf с использованием wkhtmltopdf необходимо указать URL, например:

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

Я знаю, что мне чего-то не хватает в статическом файле. Но я хочу знать, почему он работает с шаблоном рендеринга, а не с Генерацией pdf с использованием wkhtmltopdf. Я не думаю, что это хорошая идея, чтобы поместить доменное имя непосредственно в ссылочный URL.

Подробное решение для этого было бы полезно, так как я новичок в django.

Я тоже пытался следовать этому ответу, но ничего не получалось: Django wkhtmltopdf не читает статические файлы

1 Ответ

0 голосов
/ 10 ноября 2018

в вашем 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 в конце

...