Weaseyprint, Cairo, Dajngo на Pythonanywhere 25MAY21 не могу пройти предупреждение

Извините, я знаю, что, кажется, много об этой теме. Но я не вижу реального разрешения?

Я пытаюсь разместить интернет-магазин пиццы Django для изучения Django на веб-сайте. Локально это прекрасно работает без проблем. Я сопоставил свою локальную среду с окружающей средой на сервере. Я решил эту проблему локально, когда обновил Cairo на своем компьютере. Так что эмулируемый сервер отлично работает.

Сервер Python 3.8.0

Вот ошибка и следите за информацией.

Ошибка из журнала ошибок на сервере. 2021-05-28 16:13:41,156: /home/williamc1jones/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/weasyprint/document.py:35: UserWarning: известны проблемы с рендерингом и отсутствующие функции с Каир ‹ 1.15.4. WeasyPrint может работать со старыми версиями, но, прежде чем сообщать об ошибках, прочитайте примечание о необходимой версии cairo на странице установки документации. http://weasyprint.readthedocs.io/en/latest/install.html

файл views.py в приложении заказа

import weasyprint   
from django.urls import reverse
from django.shortcuts import render, redirect
from django.contrib.admin.views.decorators import staff_member_required
from django.shortcuts import get_object_or_404
from django.conf import settings
from django.http import HttpResponse
from django.template.loader import render_to_string
from cart.cart import Cart
from .models import OrderItem, Order
from .forms import OrderCreateForm
from .tasks import order_created


def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
            for item in cart:
                OrderItem.objects.create(order=order,
                                         product=item['product'],
                                         price=item['price'],
                                         quantity=item['quantity'])
            # clear the cart
            cart.clear()
            # launch asynchronous task
            order_created.delay(order.id)
            # set the order in the session
            request.session['order_id'] = order.id
            # redirect for payment
            return redirect(reverse('payment:process'))
    else:
        form = OrderCreateForm()
    return render(request,
                  'orders/order/create.html',
                  {'cart': cart, 'form': form})


@staff_member_required
def admin_order_detail(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    return render(request,
                  'admin/orders/order/detail.html',
                  {'order': order})


@staff_member_required
def admin_order_pdf(request, order_id):
    order = get_object_or_404(Order, id=order_id)
    html = render_to_string('orders/order/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

Снимок стоп-кадра env

-f /usr/share/pip-wheels
amqp==2.6.1
appdirs==1.4.4
billiard==3.6.4.0
braintree==3.59.0
cairocffi==1.2.0
CairoSVG==2.5.2
celery==4.4.2
certifi==2020.12.5
cffi==1.14.5
chardet==4.0.0
click==8.0.1
cssselect2==0.4.1
defusedxml==0.7.1
distlib==0.3.1
Django==2.1.15
django-pyodbc-azure-2019==2.1.0.0
filelock==3.0.12
Flask==2.0.1
Flask-WeasyPrint==0.6
html5lib==1.1
idna==2.10
itsdangerous==2.0.1
Jinja2==3.0.1
kombu==4.6.11
MarkupSafe==2.0.1
pbr==5.5.1
pdfrw==0.4
Pillow==8.2.0
pycparser==2.20
pyodbc==4.0.30
Pyphen==0.10.0
pyth==0.6.0
pytz==2021.1
requests==2.25.1
six==1.15.0
stevedore==3.3.0
tinycss2==1.1.0
urllib3==1.26.4
vine==1.3.0
virtualenv==20.4.4
virtualenv-clone==0.5.4
virtualenvwrapper==4.8.4
wcwidth==0.2.5
WeasyPrint==52
webencodings==0.5.1
Werkzeug==2.0.1
whitenoise==5.2.0

Мой веб-сайт протестирован по адресу http://williamc1jones.pythonanywhere.com/.

это один из странных случаев, когда предупреждение является ошибкой. Я знаю это, потому что у меня была точно такая же проблема на моем локальном компьютере. Когда я обновил Cairo на своем компьютере, предупреждение исчезло, а затем все заработало правильно. На данный момент, хотя вы не увидите его в журнале ошибок. Он застревает в цикле и не переходит к вводу кредитной карты на следующем экране.

Я также спросил на https://www.pythonanywhere.com/forums/topic/29823/#id_post_94745.

Моя работа вокруг:

views.py in orders app

import xhtml2pdf
from xhtml2pdf import pisa


def admin_order_pdf(request, order_id):
      template_path = 'orders/order/pdf.html'
      order = get_object_or_404(Order, id=order_id)
      context = {'order': order}
      response = HttpResponse(content_type='application/pdf')
      response['Content-Disposition'] = f'filename=order_{order.id}.pdf'
      template = get_template(template_path)
      html = render_to_string('orders/order/pdf.html', context)
      pdf = open('order.pdf', "w+b")
      #creating the pdf
      pisa_status = pisa.CreatePDF(html, dest=response)
      if pisa_status.err:
          return HttpResponse('We had some errors <pre>' + html + '</pre>')
      return response

person w j    schedule 28.05.2021    source источник
comment
Поскольку это очень специфично для PythonAnywhere, и похоже, что на ваш пост на форумах был ответ, в котором говорилось, что Cairo скоро будет обновлен в сервисе, возможно, было бы лучше закрыть этот вопрос здесь?   -  person Giles Thomas    schedule 01.06.2021


Ответы (1)


Да, я хотел поблагодарить всех за помощь. Пока у меня есть время для моего проекта, я отредактирую пост, чтобы увидеть свою работу. Спасибо.

person w j    schedule 01.06.2021