0

我编写了一个小的 django 自定义模板标签 (inclution_tag),我想用它来显示一个 html 表格,其中显示了我的 VehicleBrand 和 VehicleModel 模型中的车辆品牌和型号列表,但是模板标签似乎没有传递变量从模板标签中的数据库查询到html。我是 django 的新手,所以如果我遗漏了一些明显的东西,请告诉我。任何帮助将不胜感激。

这是我的模板标签,它位于我的应用程序下的模板目录中。模板标签目录包含一个 _ init _.py

from django import template
from castester.models import VehicleBrand

register = template.Library()

@register.inclusion_tag("brand_model_select.html")
def brand_model_select():
    brand_list = VehicleBrand.objects.all()
    return {'brand_list':brand_list}

这是我的model.py

from django.db import models

class VehicleBrand(models.Model):
    description = models.CharField(max_length=100)
    code = models.SlugField(primary_key=True)

这是我的brand_model_select.html

{% load castest_extras %}
<table>
    {% for brand in brand_list %}
        <tr>
            <td>{{ brand.code }}</td>
            <td>{{ brand.description }}</td>
        </tr>
    {% endfor %}
</table>

这是我从基于类的视图中调用我的 html 的 urls.conf 行。

url(r'^$', TemplateView.as_view(template_name='brand_model_select.html'))

这是模型查询的输出,以证明正在从数据库中检索数据。

>>> from castester.models import VehicleBrand
>>> VehicleBrand.objects.all().values()
[{'code': u'1', 'description': u'FORD'}, {'code': u'2', 'description': u'HOLDEN'}]

使用以下源呈现空白页面。我从包含标签传递的查询输出在哪里?

<table>

</table>
4

1 回答 1

1

你不打算brand_model_select.html直接渲染。相反,您应该从不同的模板调用您的模板标签:

# in url conf
`url(r'^$', TemplateView.as_view(template_name='homepage.html'))`

# in homepage.html
{% load castest_extras %}
{% brand_model_select %}

包含标签的意义在于您可以将其包含在另一个视图中。您现在所做的根本不使用模板标签;相反,它只是brand_model_select.html完全忽略标签。

于 2013-04-14T03:52:35.373 回答