В Django, как я могу использовать строковое значение элемента списка, чтобы получить значение переменной объекта? - PullRequest
2 голосов
/ 07 января 2012

Предполагается, что столбцы - это список, содержащий строки, каждая строка представляет одну из переменных объекта o .

<tbody>
    {% for o in objects %}
    <tr>
        {% for col in columns %}
        <td>{{ o.col }}</td>
        {% endfor %}
    </tr>
    {% endfor %}
</tbody>

Пример:

class Dog(models.Model):
    name = models.CharField()
    age = models.IntegerField()
    is_dead = models.BooleanField()

columns = ('name', 'age')

Я не могу явно ввести имя переменной объекта и должен передать его как другой список, потому что я пытаюсь создать «универсальный» шаблон.Кроме того, не все переменные должны быть показаны пользователям.

1 Ответ

1 голос
/ 07 января 2012

Я недостаточно знаком с django, чтобы знать, есть ли что-то встроенное для этого, но ... вы можете просто определить свою собственную версию getattr как шаблонный фильтр .По какой-то причине (я предполагаю, потому что это встроенная функция), я не смог просто зарегистрировать встроенную функцию в качестве нового шаблона фильтра.В любом случае, вот как я определил свою версию:

# This is defined in myapp/templatetags/dog_extras.py
from django import template

register = template.Library()

@register.filter
def my_getattr(obj, var):
    return getattr(obj, var)

Чтобы использовать ее, вы будете использовать ее так же, как и любые другие два шаблона-фильтра arg:

{{ o|my_getattr:col }}

Вот полный пример (не забывайте о директиве load в верхней части!):

{% load dog_extras %}

<table>
    <tbody>
        {% for o in objects %}
        <tr>
            {% for col in columns %}
            <td>{{ o|my_getattr:col }}</td>
            {% endfor %}
        </tr>
        {% endfor %}
    </tbody>
</table>

Если вы никогда раньше не создавали пользовательских шаблонных фильтров, обязательно прочитайте документы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...