#python #html #css #django
#питон #HTML #css — код #django #python #css
Вопрос:
Мой PDF.html не ссылается ни на какой CSS-файл, я попробовал следующее:
Шаблон PDF.HTML
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link href='{% static "css/bootstrap.min.css" %}' rel="stylesheet">
<!-- Material Design Bootstrap -->
<link href='{% static "css/mdb.min.css" %}' rel="stylesheet">
<!-- Your custom styles (optional) -->
<link href='{% static "css/style.min.css" %}' rel="stylesheet">
Я использую те же файлы CSS для других шаблонов, что и base.html который работает нормально и связывается с ними, но для этого конкретного HTML он не связывается, поэтому я пытаюсь найти причину этой проблемы
Вот это самое base.html
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
-----------------------------------------------------
<link href='{% static "css/bootstrap.min.css" %}' rel="stylesheet">
<!-- Material Design Bootstrap -->
<link href='{% static "css/mdb.min.css" %}' rel="stylesheet">
<!-- Your custom styles (optional) -->
<link href='{% static "css/style.min.css" %}' rel="stylesheet">
Я использую weazyprint для получения pdf, поэтому вот просмотры, которые я пытался использовать, но он возвращается FileNotFoundError at /admin/order/50/pdf/ [Errno 2] No such file or directory: 'C:\Users\User\Desktop\static_rootcss/pdf.css'
@staff_member_required
def admin_order_pdf(request, order_id):
order = get_object_or_404(Order,ordered=True, id=order_id)
html = render_to_string('pdf.html', {'order': order})
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = f'filename="order_{order.id}.pdf"'
weasyprint.HTML(string=html).write_pdf(response,
stylesheets=[weasyprint.CSS(settings.STATIC_ROOT 'css/pdf.css')])
return response
Я использую следующую конфигурацию в settings.py
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_in_env')]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(VENV_PATH, 'static_root')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Комментарии:
1. Вы расширили
base.html
inpdf.html
?2. @BiploveLamichhane Я не пытаюсь расширить его до Base.html и я пытаюсь связать его только с CSS-файлом. В качестве теста я фактически расширил его до Base, и он работал, показывал навигационные панели и другие вещи, но это PDF-файл, поэтому я пытаюсь добавить только CSS в этот html
3. Можете ли вы попробовать перезагрузить страницу, нажав:
ctrl F5
чтобы проверить, не проблема ли это с кешем.4. @BiploveLamichhane я делал это несколько раз, никакого эффекта
5. @BiploveLamichhane Я добавил еще немного информации
Ответ №1:
Попробуйте:
weasyprint.HTML(string=html).write_pdf(response,
stylesheets=[weasyprint.CSS(settings.STATIC_ROOT '/css/pdf.css')])
Редактировать
Похоже settings.STATIC_ROOT
, что он не указывал на правильный путь. Итак, добавление правильного пути, т.е. STATICFILES_DIRS
Будет работать. Итак:
@staff_member_required
def admin_order_pdf(request, order_id):
order = get_object_or_404(Order,ordered=True, id=order_id)
html = render_to_string('pdf.html', {'order': order})
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = f'filename="order_{order.id}.pdf"'
weasyprint.HTML(string=html).write_pdf(response,
stylesheets=[weasyprint.CSS(settings.STATICFILES_DIRS[0] '/css/pdf.css')])
return response
Комментарии:
1. [Ошибка 2] Нет такого файла или каталога: ‘C:\Users\User\Desktop\static_root/css/pdf.css ‘
2. Есть ли
static_root
папка непосредственно внутриDesktop
?3. Нет, я не знаю, почему он ищет там
4. Какова тогда структура каталогов??
5. Я добавил это в сообщение