How to access an attribute of an object using a variable in django template?

后端 未结 2 1281
逝去的感伤
逝去的感伤 2021-01-12 08:49

How can I access an attribute of an object using a variable? I have something like this:

{% for inscrito in inscritos %}
   {% for field in list_fields_inscr         


        
相关标签:
2条回答
  • 2021-01-12 09:20

    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.

    0 讨论(0)
  • 2021-01-12 09:36

    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 }}
    
    0 讨论(0)
提交回复
热议问题