[Fixed]-How to access an attribute of an object using a variable in django template?

17👍

You can write a template filter for that:

myapp/templatetags/myapp_tags.py

from django import template

register = template.Library()

@register.filter
def get_obj_attr(obj, attr):
    return getattr(obj, attr)

Then in template you can use it like this:

{% load myapp_tags %}

{% for inscrito in inscritos %}
   {% for field in list_fields_inscrito %}
      {{ inscrito|get_obj_attr:field }}
   {% endfor %}
{% endfor %}

You can read more about writing custom template tags.

3👍

Fixed answer for non string attributes

The selected answer don’t cover cases where you need to access non string attributes.

If you are trying to access an attribute that isn’t a string, then you must use this code:

from django import template

register = template.Library()

@register.filter
def get_obj_attr(obj, attr):
    return obj[attr]

For this, create a folder named templatetags on your app’s folder, then create a python file with whatever name you want and paste the code above
inside.

Inside your template load your brand new filter using the {% load YOUR_FILE_NAME %}, be sure to change YOUR_FILE_NAME to your actual file name.

Now, on your template you can access the object attribute by using the code bellow:

{{ PUT_THE_NAME_OF_YOUR_OBJECT_HERE|get_obj_attr:PUT_THE_ATTRIBUTE_YOU_WANT_TO_ACCESS_HERE }}

Leave a comment