Спасибо за подсказку, Джерри. Я обнаружил, что написание нестандартного тега шаблона, как вы предложили, - это путь.
Вот ужасные подробности на случай, если кто-нибудь наткнется на это.
В методе view я опубликовал словарь "user_activity_status", который содержит ключ activity.id и значение объекта UserActivityWork для работы пользователя, выполнившего эту операцию
Это соответствующий раздел шаблона. В основном это будет добавить переменную "map_value" со значением
getattr(user_activity_status[activity.id], "comment")
Вот шаблон:
{% load *file-name-of-the-templatetag-file* %}
{% access_map_method user_activity_status activity.id comment %}
{% if map_value %}
{{ map_value }}
{% else %}
get working sucka!
{% endif %}
здесь есть раздел файла тега шаблона (подробности о том, как его настроить, см. В ссылках Джерри)
from django import template
register = template.Library()
@register.tag(name="access_map_method")
def do_access_map_method(parser, token):
try:
tag_name, dict_name , key_name, method_name = token.contents.split()
except ValueError:
msg = '%r tag requires three arguments' % token.contents[0]
raise template.TemplateSyntaxError(msg)
return MapNode(dict_name , key_name, method_name)
class MapNode(template.Node):
def __init__(self, dict_name, key_name, method_name):
self.dict_var = template.Variable(dict_name)
self.key_var = template.Variable(key_name)
self.method_name = method_name
def render(self, context):
try:
dict_obj = self.dict_var.resolve(context)
key_obj = self.key_var.resolve(context)
if key_obj in dict_obj.keys():
if self.method_name:
context['map_value'] = getattr(dict_obj[key_obj], self.method_name)
else:
context['map_value'] = dict_obj[key_obj]
else:
context['map_value'] = ''
except template.VariableDoesNotExist:
context['map_value'] = ''
return ''