def get_attribute(value, arg, return_as_string=True):
"""
Gets an attribute of an object dynamically from a string name
"""
numeric_test = re.compile("^\d+$")
if hasattr(value, '__iter__') and arg in value:
value = value[arg]
elif hasattr(value, str(arg)):
value = getattr(value, arg)
elif numeric_test.match(str(arg)) and len(value) > int(arg):
value = value[int(arg)]
else:
return settings.TEMPLATE_STRING_IF_INVALID
if hasattr(value, '__call__'):
value = value()
if return_as_string:
value = mark_safe(value)
return value
评论列表
文章目录