Coverage for api/templatetags/get_attr.py: 32%

13 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-07 06:14 +0000

1import re 

2 

3from django import template 

4 

5 

6numeric_test = re.compile(r"^\d+$") 

7register = template.Library() 

8 

9 

10def get_attr(value, arg): 

11 """Get an attribute of an object dynamically from a string name""" 

12 

13 if hasattr(value, str(arg)): 

14 return getattr(value, arg) 

15 elif hasattr(value, "has_key") and value.has_key(arg): 

16 return value[arg] 

17 elif numeric_test.match(str(arg)) and len(value) > int(arg): 

18 return value[int(arg)] 

19 else: 

20 return None 

21 

22 

23register.filter("get_attr", get_attr)