将Django模型对象传递给模板标签

时间:2017-04-29 00:40:59

标签: django django-templates

我创建了一个自定义模板标记来查询对象列表,但每个对象都有一个与之关联的标记。我想将一个对象作为过滤器传递到我的模板标签中,以便在我的模板中仅显示某些标记对象。

模板标记

@register.inclusion_tag(
    'tags/_documents_snippets.html',
    takes_context=True
)
def document_snippets(context):
    Document = get_document_model()
    documents = Document.objects.all()
    return {
        'documents': documents,
        'request': context['request'],
    }

模板

<div class="col-md-12">
    <ul class="c-content-list-1 c-separator-dot c-square">
        {% for doc in documents %}
            <li><a href="{{ doc.url }}">{{ doc.title }}</a></li>
        {% endfor %}
    </ul>
</div>

代码

{% document_snippets %}

我可以执行{% document_snippets|tags="AO Now" %}

之类的操作

1 个答案:

答案 0 :(得分:1)

您可以像模板标记一样向常规函数添加任意参数。例如:

@register.inclusion_tag(
    'tags/_documents_snippets.html',
    takes_context=True
)
def document_snippets(context, **kwargs):
    Document = get_document_model()
    documents = Document.objects.filter(**kwargs)
    return {
        'documents': documents,
        'request': context['request'],
    }

然后用:

来调用它
{% document_snippets tags="AO Now" %}