Python 在Django中将HTML转换为PDF时出错

Python 在Django中将HTML转换为PDF时出错,python,django,pdf,Python,Django,Pdf,Django正在抛出“'NoneType'对象没有属性'encode'”错误。我试图使用django easy pdf的PDFTemplateView来生成pdf报告表单。唯一的问题是,调试器并没有给我很多指导。我希望第二双眼睛可能会有所帮助 感谢您的任何帮助 Views.py Models.py HTML: 航空涡轮机国际 以下各项的内部校准报告: ID号{tool.ID} 校准截止日期:{tool.Due_Date} 上次校准日期:{{tool.Last_certified} 工具(设备)

Django正在抛出“'NoneType'对象没有属性'encode'”错误。我试图使用django easy pdf的PDFTemplateView来生成pdf报告表单。唯一的问题是,调试器并没有给我很多指导。我希望第二双眼睛可能会有所帮助

感谢您的任何帮助

Views.py Models.py HTML:

航空涡轮机国际
以下各项的内部校准报告:
ID号{tool.ID}
校准截止日期:{tool.Due_Date}
上次校准日期:{{tool.Last_certified}
工具(设备)标识
描述:{{tool.Description}}
制造商:{{tool.Manufacturer}}
{%if tool.partnumber%}
型号/零件号:{%表示工具中的零件号。零件号{set.all%}[{{零件号}]{%endfor%}
{%endif%}
{%if tool.serialnumber%}
序列号:{%表示工具中的序列号。序列号集合。所有%}[{{序列号}}]{%endfor%}
{%endif%}
{%if tool.usage_range%}
完整范围:{{tool.usage_Range}
有限范围:
{%endif%}
项目条件/特殊要求校准试验结果
根据制造商规范和/或标准惯例完成

尝试删除report.css并在样式标记中包含内容。

是否可以从异常中包含堆栈跟踪?
class ToolReport(PDFTemplateView):
model = ToolCalibration
template_name = "report.html"
inlines = [SerialFormSet, PartFormSet]

def get_context_data(self, **kwargs):
    context = super(ToolReport, self).get_context_data(**kwargs)
    if 'pk' in self.kwargs:
        context['tool'] = ToolCalibration.objects.get(id=self.kwargs['pk'])

    return context
from django.db import models
from django.core.urlresolvers import reverse
from selectables.models import EnterpriseSchema, State, Country

class ToolStatus(models.Model):
    status = models.CharField(max_length=40)

    def __unicode__(self):
        return (self.status)

class CalibrationInterval(models.Model):
    interval = models.CharField(max_length=25)

    def __unicode__(self):
        return (self.interval)

class CalibrationMethod(models.Model):
    method = models.CharField(max_length=25)

    def __unicode__(self):
        return (self.method)

class Manufacturer(models.Model):
    name = models.CharField(max_length=35)

    def __unicode__(self):
        return (self.name)

class UsageLocation(models.Model):
    location = models.CharField(max_length=75)
    owner = models.CharField(max_length=25, default="AVMATS")

    def __unicode__(self):
        return (self.location)


class Vendor(models.Model):
    name = models.CharField(max_length=255)
    street_address = models.CharField(max_length=255)
    city = models.CharField(max_length=35)
    state = models.ForeignKey(State, null=True)
    country = models.ForeignKey(Country, default=lambda:
    Country.objects.get(name__exact="United States"))
    zipcode = models.IntegerField()
    contact_title = models.CharField(max_length=50)
    free_phone = models.CharField("Toll free phone number", max_length=30, blank=True)
    phone_number = models.CharField(max_length=30, blank=True)
    extension = models.CharField("Phone extension", max_length=30, blank=True)
    email_address = models.CharField(max_length=75, blank=True)
    website = models.CharField(max_length=75, blank=True)
    free_fax = models.CharField("Toll free fax", max_length=30, blank=True)
    fax_number = models.CharField(max_length=50, blank=True)
    notes =  models.TextField(blank=True)


    def __unicode__(self):
        return (self.name)

class ToolCalibration(models.Model):
    schema = models.ForeignKey(EnterpriseSchema, verbose_name="Location")
    old_control_number = models.CharField(max_length=25, blank=True)
    due_date = models.DateField()
    last_certified = models.DateField()
    tool_status = models.ForeignKey(ToolStatus)
    calibration_interval = models.ForeignKey(CalibrationInterval)
    calibration_method = models.ForeignKey(CalibrationMethod)
    usage_location = models.ForeignKey(UsageLocation)
    description = models.CharField(max_length=75)
    manufacturer = models.ForeignKey(Manufacturer)
    usage_range = models.CharField(max_length=35)
    notes = models.TextField(blank=True)
    po_required = models.BooleanField("Purchase order required")
    po_number = models.CharField("Purchase order number", max_length=35, blank=True, null=True)
    ra_number = models.CharField("Return authorization number", max_length=35, blank=True)
    calibration_cost = models.CharField(max_length=30, blank=True)
    vendor = models.ForeignKey(Vendor)
    date_sent = models.DateField(blank=True)
    date_returned = models.DateField(blank=True)
    man_hours = models.CharField("In-house man hours", max_length=25, blank=True)
    technician = models.CharField(max_length=45)
    facility = models.CharField(max_length=45)
    out_of_tolerance = models.BooleanField()
    tolerance_notes = models.TextField(blank=True)
    success_url = "/toolcal/success"

    def __unicode__(self):
        return (u"%s: " %self.id) + (u"%s" %self.description) 

class SerialNumber(models.Model):
    tool = models.ForeignKey(ToolCalibration)
    serial = models.CharField(max_length=35)

    def __unicode__(self):
        return (self.serial)

class PartNumber(models.Model):
    tool = models.ForeignKey(ToolCalibration)
    number = models.CharField(max_length=35)

    def __unicode__(self):
        return (self.number)

class Note(models.Model):
    tool = models.ForeignKey(ToolCalibration)
    description = models.CharField(max_length=50)
    pub_date = models.DateTimeField()

    def __unicode__(self):
        return self.description
<html>

<head>
    <link rel="stylesheet" href="/media/themes/txt/css/report.css" />
</head>

<body>  
    <div class="content">
        <div class="row">
            <div class="12u">
                <h1>Aviation Turbines International</h1>
            </div>
        </div>
        <div class="row">
            <div class="7u">
                <h2>In-House Calibration Report For: </h2>
            </div>
            <div class="5u">
                <h2>ID Number { tool.id }}</h2> 
            </div>
        </div>
        <div class="row">
            <div class="6u">
                <h2>Calibration Due Date: {{ tool.due_date }} </h2>
            </div>
            <div class="6u">
                <h2>Date Last Calibrated: {{ tool.last_certified }} </h2>
            </div>
        </div>
        <div class="row">
            <div class="12u">
                <h1>Tool (Equipment) Identification</h1>
            </div>
        </div>
        <div class="row">
            <div class="12u">
                <h2>Description: {{ tool.description }}</h2>
            </div>
        </div>
        <div class="row">
            <div class="12u">
                <h2>Manufacturer: {{ tool.manufacturer }}</h2>
            </div>
        </div>
        {% if tool.partnumber %}
            <div class="row">
                <div class="12u">
                    <h2>Model/Part Number(s): {% for part_number in tool.partnumber_set.all %}[{{ part_number }}] {% endfor %}</h2>
                </div>
            </div>
        {% endif %}
        {% if tool.serialnumber %}
            <div class="row">
                <div class="12u">
                    <h2>Serial Number(s): {% for serial_number in tool.serialnumber_set.all %}[{{ serial_number }}] {% endfor %}</h2>
                </div>
            </div>
        {% endif %}
        {% if tool.usage_range %}
            <div class="row">
                <div class="6u">
                    <h2>Full Range: {{ tool.usage_range }}</h2>
                </div>
                <div class="6u">
                    <h2>Limited Range: </h2>
                </div>
            </div>
        {% endif %}
        <div class="row">
            <div class="12u">
                <h1>Item Condition/Special Requirements-Calibration Test Results</h1>
            </div>
        </div>
        <div class="row">
            <div class="12u">
                <h2>Accomplished in Accordance with Manufacturer's Specifications and/or Standard Practices</h2>
            </div>
        </div>
        <div class="box"
            <div class="row">
                <div class="box"
                    <div class="6u">
                        <h2>As Received</h2>
                    </div>
                </div>
                <div class="box"
                    <div class="6u">
                        <h2>As Returned</h2>
                    </div>
                </div>
            </div>
        </div>
        <div class="box"
            <div class="row">
                <div class="box"
                    <div class="6u">
                        <h2>[] In Tolerance </h2>
                        <h2>[] Out of Tolerance </h2>
                        <h2>[] Limited Calibration </h2>
                        <h2>[] Inoperative </h2>
                        <h2>[] Note:  </h2>
                    </div>
                </div>
                <div class="box"
                    <div class="6u">
                        <h2>[] In Tolerance </h2>
                        <h2>[] Out of Tolerance </h2>
                        <h2>[] Limited Calibration </h2>
                        <h2>[] Inoperative </h2>
                        <h2>[] Adjusted  </h2>
                    </div>
                </div>
            </div>
        </div>

        <div class="row">
            <div class="12u">
                <h2>This equipment was checked/calibrated through [] full or [] limited range, and kept within _____ accuracy</h2>
            </div>
        </div>

        <div class="row">
            <div class = "box">
                <div class="2u">                    
                    <h2>Standard</h2>
                </div>
            </div>
            <div class = "box">
                <div class="2u">                    
                    <h2>Actual Reading</h2>
                </div>
            </div>
            <div class = "box">
                <div class="3u">                    
                    <h2>Deviation</h2>
                </div>
            </div>
            <div class = "box">
                <div class="3u">                    
                    <h2>In/Out of Cal</h2>
                </div>
            </div>
            <div class = "box">
                <div class="3u">                    
                    <h2>Final Reading</h2>
                </div>
            </div>
        </div>

        {% for i in "xxxxxxxxxxxxx" %}
            <div class="row">
                <div class = "box">
                    <div class="2u">
                        <h2>Standard</h2>
                    </div>
                </div>
                <div class = "box">
                    <div class="2u">
                        <h2>Actual Reading</h2>
                    </div>
                </div>
                <div class = "box">
                    <div class="3u">
                        <h2>Deviation</h2>
                    </div>
                </div>
                <div class = "box">
                    <div class="3u">
                        <h2>In/Out of Cal</h2>
                    </div>
                </div>
                <div class = "box">
                    <div class="3u">
                        <h2>Final Reading</h2>
                    </div>
                </div>
            </div>
        {% endfor %}
    </div>
</body>