Шаблоны Django: подробная версия выбора

Еще одна вещь отметить, если Вы обновили приложение прежней версии, которое имело структуры для использования классов, Вы могли бы столкнуться со следующей проблемой:

Старый код имеет структуры, код был очищен и они измененные на классы. Виртуальная функция или два была тогда добавлена к новому обновленному классу.

, Когда виртуальные функции будут в классах тогда внутренне, компилятор добавит дополнительный указатель на данные класса для указания на функции.

то, Как это повредило бы старый унаследованный код, - то, если бы в старом коде где-нибудь структура была очищена с помощью memfill для очистки всего этого к нулям, это затоптало бы дополнительные данные указателя также.

121
задан Artur Gajowy 9 July 2009 в 18:16
поделиться

3 ответа

Я не думаю, что есть какой-то встроенный способ сделать это. Однако фильтр может помочь:

@register.filter(name='display')
def display_value(bf):
    """Returns the display value of a BoundField"""
    return dict(bf.field.choices).get(bf.data, '')

Затем вы можете сделать:

{% for field in form %}
    <tr>
        <th>{{ field.label }}:</th>
        <td>{{ field.data|display }}</td>
    </tr>
{% endfor %}
5
ответ дан 24 November 2019 в 01:27
поделиться

В шаблонах Django вы можете использовать метод « get_FOO_display () », который вернет читаемый псевдоним для поля, где «FOO» - это имя поля. .

Примечание: если стандартные шаблоны FormPreview не используют его, вы всегда можете предоставить свои собственные шаблоны для этой формы, которые будут содержать что-то вроде { {form.get_meal_display}} .

242
ответ дан 24 November 2019 в 01:27
поделиться

На основании ответа Ноя, вот версия, невосприимчивая к полям без выбора:

#annoyances/templatetags/data_verbose.py
from django import template

register = template.Library()

@register.filter
def data_verbose(boundField):
    """
    Returns field's data or it's verbose version 
    for a field with choices defined.

    Usage::

        {% load data_verbose %}
        {{form.some_field|data_verbose}}
    """
    data = boundField.data
    field = boundField.field
    return hasattr(field, 'choices') and dict(field.choices).get(data,'') or data

Я не уверен, можно ли использовать фильтр для этой цели. Если у кого-нибудь есть решение получше, я буду рад его увидеть :) Спасибо, Ной!

9
ответ дан 24 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: