Пользовательский тег шаблона, вероятно, единственный способ перейти сюда, если вы не хотите реструктурировать свои объекты.Для доступа к словарям с произвольным строковым ключом ответ на этот вопрос дает хороший пример.
Для ленивых:
from django import template
register = template.Library()
@register.simple_tag
def dictKeyLookup(the_dict, key):
# Try to fetch from the dict, and if it's not found return an empty string.
return the_dict.get(key, '')
Который вы используете так:
{% dictKeyLookup your_dict_passed_into_context "phone-number" %}
Если вы хотите получить доступ к атрибуту объекта с произвольным именем строки, вы можете использовать следующее:
from django import template
register = template.Library()
@register.simple_tag
def attributeLookup(the_object, attribute_name):
# Try to fetch from the object, and if it's not found return None.
return getattr(the_object, attribute_name, None)
Который вы бы использовали как:
{% attributeLookup your_object_passed_into_context "phone-number" %}
Вы могли бы даже придумать какой-нибудь строковый разделитель (например, '__') для податрибутов, но я оставлю это для домашней работы: -)