【问题标题】:Template not rendering in django模板未在 Django 中呈现
【发布时间】:2019-10-27 17:15:30
【问题描述】:

我正在尝试制作发票收据,它从 django 数据库中获取数据并将该数据呈现在模板上。数据已存储并可在终端中显示数据已很好地存储在该模型中。我已经做了好几次了,但我无法弄清楚为什么我的模板中没有呈现数据。

这是我的 Models.py

class LR(models.Model):
    lr_quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='quiz_lr')

    lr_no = models.IntegerField(default=0)
    lr_date = models.DateTimeField(max_length=255, default=now)
    lr_billingparty = models.CharField(max_length=255, default=0)  # supplier company name foreign key

    invoice_no = models.IntegerField(default=0)
    lr_declared = models.IntegerField(default=0)
    ewaybill_no = models.IntegerField(default=0)
    lr_quantity = models.IntegerField(default=0)  # quantity
    lr_weight = models.IntegerField(default=0)  # weight

    lr_invoice_date = models.DateTimeField(max_length=255, default=now)

    lr_item_name = models.CharField(max_length=255, default=0)  # said to contain

    lr_consignor_name = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignor_address = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignor_contact_name = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignor_contact_phone = models.CharField(max_length=255, default=0)  # shipper company name

    lr_consignee_name = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignee_address = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignee_contact_name = models.CharField(max_length=255, default=0)  # shipper company name
    lr_consignee_contact_phone = models.CharField(max_length=255, default=0)  # shipper company name

    vehicle_no = models.CharField(max_length=255, default=0)
    lr_vehicle_type = models.IntegerField(default=0)
    driver_name = models.CharField(max_length=255, default=0)
    driver_no = models.IntegerField(default=0)

def str (self):
    return self.name

这是我的views.py:

def PrintLR (request, pk):
    LR = get_object_or_404(LR, lr_quiz_id=pk)
    context_object_name = 'LR'
    template_name = 'classroom/suppliers/showLR.html'
    return render(request, 'classroom/suppliers/showLR.html', {LR:'LR'})

这是我的 HTML 模板:

<tr>
    <th>CNOTE NO</th>
    <th>BOOKING DATE</th>
    <th>BILLING PARTY</th>



</tr>
<tr>
    <td>{{ LR.lr_consignor_contact_phone }}</td>
    <td>{{ LR.lr_declared }}</td>
    <td>{{ LR.lr_consignee_name }}</td>
</tr>

模板中没有数据,而是字段为空。

【问题讨论】:

  • 是没有渲染模板还是没有渲染上下文数据?
  • 嗨 chirag,在渲染您提供的模板时 {LR:'LR'} 但在客户端中您正尝试访问 LR.some_property。首先,LR中只有一个字符串,即'LR'。尝试分配一个不带引号的dict值,例如{'LR':LR}
  • 例如:LR = dict(); LR.lr_consignor_contact_phone="733849"; return render(request, 'classroom/suppliers/showLR.html', {'LR':LR})
  • @shafik 模板已渲染,但该模板中未显示任何数据。所有字段均为空白。
  • @PrasanthGanesan 嗯,这是一种很棒的方法,但它不是总是给我分配的静态数据,而不是实时从数据库中获取数据吗?

标签: python django-models django-forms django-templates


【解决方案1】:

这个:

return render(request, 'classroom/suppliers/showLR.html', {LR:'LR'})

是错误的 - 您使用模型实例作为键和文字字符串 'LR' 作为值,因此在您的模板上下文中没有任何名为“LR”的内容。你想要的是

return render(request, 'classroom/suppliers/showLR.html', {'LR':LR})

请注意,这次我们使用字符串作为键,使用实例作为值。

作为旁注,您不应将实例命名为与类相同的名称 - 这充其量是令人困惑的,并且可能导致意外行为,因为它会在当前范围的其余部分中隐藏类。哦,是的:context_object_name = 'LR' 部分完全没用。

【讨论】:

  • 我好尴尬。那真是个愚蠢的错误。非常感谢您指出这个错误。
【解决方案2】:

PrintLR 方法的变化

def PrintLR (request, pk):
    qwe = get_object_or_404(LR, lr_quiz_id=pk)
    template_name = 'classroom/suppliers/showLR.html'
    return render(request, 'classroom/suppliers/showLR.html', {qwe:'qwe'})

首先,确保它返回一个对象。

qwe = get_object_or_404(LR, lr_quiz_id=pk)

然后在模板中

<td>{{ qwe.lr_consignor_contact_phone }}</td>
<td>{{ qwe.lr_declared }}</td>
<td>{{ qwe.lr_consignee_name }}</td>

【讨论】:

  • 我现在已经编辑了代码。这是LR而不是qwe。问题仍未解决。
  • 尝试打印qwe。有价值吗?
  • 是的,它返回给我一个对象和 qwe 的任何属性,比如说 'qwe.lr_consignor_contact_phone' 在终端上返回给我一个电话号码。
  • 是的,它返回给我一个对象和 qwe 的任何属性,比如说 'qwe.lr_consignor_contact_phone' 在终端上返回给我一个电话号码
  • 给出你在控制台中得到的东西