不能使用Django中的customtag迭代“ My_Model”对象

时间:2018-07-02 07:04:48

标签: django

我是Django的新手,我试图通过在Django中创建自定义标签来使数据可用于其他应用程序中的模板。

我的model.py

from django.db import models

class my_Model(models.Model):
   name = models.CharField(max_length=20)
   age = models.CharField(max_length=20)

我的自定义标记文件templatetag/custom_tag.py(为什么这样做是为了使我的数据可被不同应用程序中的模板访问)

from django import template
from model_file.models import my_Model

register = template.Library()

@register.simple_tag
def get_custom_tag_fn():
    return my_Model.objects.order_by('-pk')[0]

我的html文件

{% load custom_tag %}
{% get_custom_tag_fn as ct %}
    {% for item in ct %}
    <p> {{ item }} </p>
     {% endfor %}

我收到错误'My_Model' object is not iterable。关于如何解决这个问题的任何想法。

1 个答案:

答案 0 :(得分:0)

问题在这里:

return my_Model.objects.order_by('-pk')[0]

Model objects.order_by(...)返回queryset,类似于集合的列表,因此使用[0]索引获取该集合的第一个对象,该对象当然是不可迭代的(它只是一个对象)。因此,在那之后,当您尝试迭代时:

  {% for item in ct %}
       ...

您正在捕获此错误。