Я изучаю Django, строя небольшой сайт, и я обнаружил, что у меня много шаблонов, где я перечисляю объекты, каждый из которых имеет ссылку на него. я думал, что я мог бы сделать пользовательский тег шаблона, что-то вродеКак передать URL-адрес в пользовательском теге шаблона?
{% object_list some %}
some
является словарем {'list': obj_list, 'link': link}
где obj_list
список объектов Я хочу, чтобы распечатать и link
должны некоторые URL структура, которая указывает на предмет.
шаблон (называемый object_list.html) должен выглядеть
{% for object in object_list %}
<li><a href="{% url myapp:object object.id %}">{{object.name}}</a></
{% endfor %}
Теперь моя проблема заключается в том, что я не знаю, что делать в ссылке. Я хочу, чтобы он был гибким, так что «myapp: object» заменяется ссылкой «link», например, если тип объекта - «Пользователь», то я использую {%url myapp:user user.id%}
.
Это можно сделать? Как?
Я попытался this solution в виде
{% for object in object_list %}
{% url 'link' as my_url %}
<li><a href="{% url my_url object.id %}">{{object.name}}</a></li>
{% endfor %}
дает 'myapp:myobject'
в качестве аргумента, но он не работает. Чтобы быть точным, в шаблоне
{% load property_extras %}
{% object_list property_dict %}
где property_dict
это мой аргумент, и templatetag/property_extras.py
является файл, в котором сохраняется тег, дает ошибку NoReverseMatch (если я использую обычный шаблон -Без обычай tag- это работает отлично).
Для получения дополнительной информации, мой шаблон тег
@register.inclusion_tag('properties/object_list.html')
def object_list(object_dict):
print(object_dict['list'])
print(object_dict['link'])
return {
'object_list': object_dict['list'],
'link': object_dict['link'],
}