I created a custom template tag to query a list of objects, but each object has a tag associated with it. I would like to pass an object as a filter into my template tag to display only certain tagged objects in my template.
Template Tag
@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'],
}
Template
<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>
Tag
{% document_snippets %}
Can I do something like {% document_snippets|tags="AO Now" %}
You can add arbitrary arguments to template tags like you can to regular functions. For example:
@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'],
}
And then call it with:
{% document_snippets tags="AO Now" %}