0

ビュー.py

@register.filter(name="avl")
def avl_facilities(obj):
    return obj.avl_facilities()

@register.filter
def na_facilities(obj):
    return obj.na_facilities()

models.py

class Model(models.Model):
#some code .....
    def avl_facilities(self):
        item = ['bar','bank','music','wifi','offers','credit']
        avl = []
        for i in item:
            if getattr(self,i) == True:
                avl.append(i)
        return avl
    def na_facilities(self):
        item = ['bar','bank','music','wifi','offers','credit']
        na = []
        for i in item:
            if getattr(self,i) == False:
                na.append(i)
        return na

html

<div class="facility pad10">
    {% for item in data.rest|avl %}
/* data.rest is appropriate instance of model defined above*/
    <span class="label label-danger mrg2 pad5 pull-left">
    {{item|title}}
    </span>
    {% endfor %}
</div>

エラー

Invalid filter: 'avl_facilities'

疑問に思う

モデル内の avl_facilities が適切な iterable list を返しているが、テンプレート フィルターとして機能していない場合は理解できません。よろしくお願いします

4

1 に答える 1

3

views.py でフィルターを定義することはできません。それらを templatetags ディレクトリ内の新しいファイルに配置する必要があります。

ただし、これらのフィルターは両方ともまったく不要であることを知っておく必要があります。引数を取らない限り、テンプレートからモデル メソッドを呼び出すことは十分に可能です。

{% for item in data.rest.avl_facilities %}
于 2012-08-23T06:28:21.343 に答える