Django:为什么这个简单的标签不起作用?

时间:2015-02-15 01:44:53

标签: python django python-3.x

我使用python 3在我的django 1.7设置中注册了以下简单标记:

# templatetags/getKonten.py    
from django import template
from bilanz.models import Konto

register = template.Library()

def getKonten():
    '''Description...'''

    konten = Konto.objects.all()

    return konten

register.simple_tag(getKonten)

当我尝试访问模板中的简单标记时,我只得到此输出:[, , , ]。它看起来像是一个空列表。但Konto桌子不是空的!我想迭代查询集中的所有对象。这就是我在模板中调用模板标签的方式:

{% load getKonten %}

{% block content %}

{% getKonten %} <!-- Output: [, , , ] -->

<!-- the for loop below has no output -->
{% for konto in getKonten %}
    <h2>{{ konto.konto_title }}</h2>
{% endfor %}

{% endblock %}

以下简单标记工作没有问题:

from django import template
from bilanz.models import Konto
from bilanz.templatetags.kontoSum import kontoSum

register = template.Library()

def totalSum(kontotype):
    konten = Konto.objects.filter(konto_type=kontotype).filter(konto_type2='-')
    sum = 0

    for konto in konten:
        sum += kontoSum(konto.id, konto.konto_type)

    return sum

register.simple_tag(totalSum)

我真的不明白这是什么问题!

更新:这是models.py:

class Konto(models.Model):
    konto_title = models.CharField(max_length=200)
    konto_anfangsBestand = models.IntegerField(default=0)
    konto_sum = models.IntegerField(default=0)
    konto_erfolgswirksam = models.BooleanField(default=False)
    konto_types = (
        ('A', 'Aktiv'),
        ('P', 'Passiv')
    )
    konto_types2 = (
        ('-', 'nicht erfolgswirksam'),
        ('B', 'Betrieb'),
        ('F', 'Finanz'),
        ('N', 'Neutral'),
        ('S', 'Steuer'),
    )
    konto_types3 = (
        ('UV', 'Umlaufvermögen'),
        ('AV', 'Anlagevermögen'),
        ('kFK', 'kurzfristiges Fremdkapital'),
        ('lFK', 'langfristiges Fremdkapital'),
        ('EK', 'Steuer'),
    )
    konto_type = models.CharField(max_length=1, choices=konto_types)
    konto_type2 = models.CharField(max_length=1, choices=konto_types2, default='-')
    konto_type3 = models.CharField(max_length=3, choices=konto_types3)
    def __str__(self):
        return self.konto_title

1 个答案:

答案 0 :(得分:5)

simple_tag意味着返回string。您需要使用的是assignment_tag

@register.assignment_tag
def get_konten():
    return Konto.objects.all()

在模板中:

{% get_konten as konten %}
{% for konto in konten %}
    ...