Python 从xhtml2pdf导入pisa时出现问题
我正在尝试Django在线教程中的以下代码。一切正常,但当我从xhtml2pdf导入“pisa”时,我得到一个错误,“导入xhtml2pdf无法解决”。可能是什么问题?我已经安装了xhtml2pdf。我还需要另一个python文件吗?请帮助我解决此问题。Python 从xhtml2pdf导入pisa时出现问题,python,django,Python,Django,我正在尝试Django在线教程中的以下代码。一切正常,但当我从xhtml2pdf导入“pisa”时,我得到一个错误,“导入xhtml2pdf无法解决”。可能是什么问题?我已经安装了xhtml2pdf。我还需要另一个python文件吗?请帮助我解决此问题。 from django.shortcuts import render, get_object_or_404 from profiles.models import Profile from django.http import JsonRes
from django.shortcuts import render, get_object_or_404
from profiles.models import Profile
from django.http import JsonResponse
from .utils import get_report_image
from .models import Report
from django.views.generic import ListView, DetailView, TemplateView
from .forms import ReportForm
from django.conf import settings
from django.http import HttpResponse
from django.template.loader import get_template
from xhtml2pdf import pisa
from sales.models import Sale, Position, CSV
from products.models import Product
from customers.models import Customer
import csv
from django.utils.dateparse import parse_date
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
class ReportListView(LoginRequiredMixin, ListView):
model = Report
template_name = 'reports/main.html'
class ReportDetailView(LoginRequiredMixin, DetailView):
model = Report
template_name = 'reports/detail.html'
class UploadTemplateView(LoginRequiredMixin, TemplateView):
template_name = 'reports/from_file.html'
@login_required
def csv_upload_view(request):
print('file is being')
if request.method == 'POST':
csv_file_name = request.FILES.get('file').name
csv_file = request.FILES.get('file')
obj, created = CSV.objects.get_or_create(file_name=csv_file_name)
if created:
obj.csv_file = csv_file
obj.save()
with open(obj.csv_file.path, 'r') as f:
reader = csv.reader(f)
reader.__next__()
for row in reader:
data = "".join(row)
data = data.split(';')
data.pop()
transaction_id = data[1]
product = data[2]
quantity = int(data[3])
customer = data[4]
date = parse_date(data[5])
try:
product_obj = Product.objects.get(name__iexact=product)
except Product.DoesNotExist:
product_obj = None
if product_obj is not None:
customer_obj, _ = Customer.objects.get_or_create(name=customer)
salesman_obj = Profile.objects.get(user=request.user)
position_obj = Position.objects.create(product=product_obj, quantity=quantity, created=date)
sale_obj, _ = Sale.objects.get_or_create(transaction_id=transaction_id, customer=customer_obj, salesman=salesman_obj, created=date)
sale_obj.positions.add(position_obj)
sale_obj.save()
return JsonResponse({'ex': False})
else:
return JsonResponse({'ex': True})
return HttpResponse()
@login_required
def create_report_view(request):
form = ReportForm(request.POST or None)
if request.is_ajax():
image = request.POST.get('image')
img = get_report_image(image)
author = Profile.objects.get(user=request.user)
if form.is_valid():
instance = form.save(commit=False)
instance.image = img
instance.author = author
instance.save()
return JsonResponse({'msg': 'send'})
return JsonResponse({})
@login_required
def render_pdf_view(request, pk):
template_path = 'reports/pdf.html'
obj = get_object_or_404(Report, pk=pk)
context = {'obj': obj}
# Create a Django response object, and specify content_type as pdf
response = HttpResponse(content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="report.pdf"'
# find the template and render it.
template = get_template(template_path)
html = template.render(context)
# create a pdf
pisa_status = pisa.CreatePDF(
html, dest=response)
# if error then show some funy view
if pisa_status.err:
return HttpResponse('We had some errors <pre>' + html + '</pre>')
return response
从django.shortcuts导入渲染、获取对象或404
从profiles.models导入配置文件
从django.http导入JsonResponse
从.utils导入获取报告图像
from.models导入报告
从django.views.generic导入ListView、DetailView、TemplateView
from.forms导入报表表单
从django.conf导入设置
从django.http导入HttpResponse
从django.template.loader导入get_模板
从xhtml2pdf导入pisa
从sales.models导入销售、职位、CSV
从产品。模型导入产品
来自客户。模型导入客户
导入csv
从django.utils.dateparse导入parse_date
从django.contrib.auth.decorators导入所需的登录名
从django.contrib.auth.mixins导入登录名RequiredMixin
类ReportListView(LoginRequiredMixin,ListView):
模型=报告
模板名称='reports/main.html'
类ReportDetailView(LoginRequiredMixin,DetailView):
模型=报告
模板名称='reports/detail.html'
类UploadTemplateView(LoginRequiredMixin,TemplateView):
模板名称='reports/from_file.html'
@需要登录
def csv_上传_视图(请求):
打印('正在打印文件')
如果request.method==“POST”:
csv_file_name=request.FILES.get('file').name
csv_file=request.FILES.get('file'))
obj,created=CSV.objects.get\u或\u create(文件名=CSV\u文件名)
如果创建:
obj.csv_文件=csv_文件
obj.save()
打开(obj.csv_file.path,'r')作为f:
读卡器=csv。读卡器(f)
读卡器。下一个
对于读取器中的行:
data=“”.join(世界其他地区)
data=data.split(“;”)
data.pop()
事务id=数据[1]
产品=数据[2]
数量=整数(数据[3])
客户=数据[4]
日期=解析日期(数据[5])
尝试:
product\u obj=product.objects.get(name\u iexact=product)
除Product.DoesNotExist外:
product_obj=无
如果产品_obj不是无:
customer\u obj,\u=customer.objects.get\u或\u create(name=customer)
sallers_obj=Profile.objects.get(user=request.user)
位置对象=位置对象创建(产品=产品对象,数量=数量,创建日期)
销售对象,销售对象,获取或创建(交易id=交易id,客户=客户对象,销售人员=销售对象,创建日期)
销售对象位置。添加(位置对象)
销售对象保存()
返回JsonResponse({'ex':False})
其他:
返回JsonResponse({'ex':True})
返回HttpResponse()
@需要登录
def创建报告视图(请求):
表单=报表表单(request.POST或None)
if request.is_ajax():
image=request.POST.get('image')
img=获取报告图像(图像)
author=Profile.objects.get(user=request.user)
如果form.is_有效():
instance=form.save(commit=False)
instance.image=img
instance.author=作者
save()实例
返回JsonResponse({'msg':'send'})
返回JsonResponse({})
@需要登录
def render_pdf_视图(请求、主键):
模板路径='reports/pdf.html'
obj=获取对象或404(报告,主键=主键)
上下文={'obj':obj}
#创建Django响应对象,并将内容类型指定为pdf
response=HttpResponse(content\u type='application/pdf')
响应['Content-Disposition']='附件;filename=“report.pdf”'
#找到模板并渲染它。
模板=获取模板(模板路径)
html=template.render(上下文)
#创建pdf
pisa_status=pisa.CreatePDF(
html,dest=响应)
#如果出现错误,则显示一些有趣的视图
如果pisa_status.err:
返回HttpResponse('我们有一些错误'+html+'')
返回响应