基本的django inclusion_tag不起作用

时间:2013-04-14 03:45:58

标签: django django-templates

我写了一个小的django自定义模板标签(inclustion_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>

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

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'}]

使用以下来源呈现空白页面。查询输出从include_tag传递到哪里?

<table>

</table>

1 个答案:

答案 0 :(得分: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完全忽略标记。