Weasyprint, Cairo, Django on Pythonanywhere 25MAY21 无法通过警告
Weaseyprint, Cairo, Dajngo on Pythonanywhere 25MAY21 can not pass a warning
抱歉,我知道关于这个话题似乎有很多内容。但是我没有看到真正的分辨率?
我正在尝试在网站上放置一个用于学习 Django 的 Django 电子商务披萨店。在本地这很好用,没有问题。我将本地环境与服务器 ENV 上的环境相匹配。当我在我的计算机上更新 Cairo 时,我在本地解决了这个问题。所以模拟服务器运行良好。
Python 3.8.0
服务器Python任何地方
这是错误和后续信息。
来自服务器上错误日志的错误。 2021-05-28 16:13:41,156: /home/williamc1jones/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/weasyprint/document.py:35:用户警告:cairo 存在已知渲染问题和缺失功能< 1.15.4。 WeasyPrint 可能适用于旧版本,但请在报告错误之前阅读文档“安装”页面上关于所需 cairo 版本的说明。 http://weasyprint.readthedocs.io/en/latest/install.html
views.py 文件顺序 app
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
环境的 pip 冻结截图
-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
是的,我想感谢大家的帮助。虽然我的项目有时间限制,但我也会按 post 查看我的工作。谢谢。
抱歉,我知道关于这个话题似乎有很多内容。但是我没有看到真正的分辨率?
我正在尝试在网站上放置一个用于学习 Django 的 Django 电子商务披萨店。在本地这很好用,没有问题。我将本地环境与服务器 ENV 上的环境相匹配。当我在我的计算机上更新 Cairo 时,我在本地解决了这个问题。所以模拟服务器运行良好。
Python 3.8.0 服务器Python任何地方
这是错误和后续信息。
来自服务器上错误日志的错误。 2021-05-28 16:13:41,156: /home/williamc1jones/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/weasyprint/document.py:35:用户警告:cairo 存在已知渲染问题和缺失功能< 1.15.4。 WeasyPrint 可能适用于旧版本,但请在报告错误之前阅读文档“安装”页面上关于所需 cairo 版本的说明。 http://weasyprint.readthedocs.io/en/latest/install.html
views.py 文件顺序 app
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
环境的 pip 冻结截图
-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
是的,我想感谢大家的帮助。虽然我的项目有时间限制,但我也会按 post 查看我的工作。谢谢。