Настройка списка результатов администратора Django - PullRequest
1 голос
/ 18 июля 2010

Как изменить результат вывода из списка результатов администратора Django?Я искал файл шаблона change_result_list.html , но все, что я могу найти:

{% for item in result %}{{ item }}{% endfor %}

, который будет выводить что-то вроде:

<tr>
    <td>
        <input type="checkbox" class="action-select" value="2" name="_selected_action" />
    </td>
    <th>
        <a href="1/">Lorem Ipsum</a>
    </th>
</tr>

Очевидно, элемент th нарушает мой дизайн.Есть ли способ изменить его на td ?

1 Ответ

2 голосов
/ 18 июля 2010

Нет «легкого» способа сделать это, поэтому я должен сначала спросить, почему именно вам нужно сделать это вообще.Я не понимаю, почему элемент <th> должен «явно» нарушать ваш дизайн.Элемент <th> эквивалентен <td>, за исключением того, что он имеет дополнительный стиль по умолчанию (обычно font-weight: bold; text-align: center;).Вы должны быть в состоянии объяснить это в своем CSS.

Тем не менее, вот некоторые возможности, на которые стоит обратить внимание.Выбор th / td определяется в строке 169 (Django 1.2.1) из django.contrib.admin.templatetags.admin_list.py.Вот краткий обзор контекста, в котором он появляется:

def items_for_result(cl, result, form):
    first = True
    for field_name in cl.list_display:
        # ...
        if (first and not cl.list_display_links) or field_name in cl.list_display_links:
            table_tag = {True:'th', False:'td'}[first]
            first = False
            # ...
            yield mark_safe(u'<%s%s><a href="%s"%s>%s</a></%s>' % (table_tag, row_class, url, ...)
        else:
            # ...
            yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr))

Как видите, не существует очевидного способа изменить поведение, определяющее значение table_tag, поэтому некоторые из имеющихся у вас параметров:

  • Определить шаблонную метку "items_for_result", которая вызывает указанную выше и заменяет любые <th> с в полученных значениях на <td> с.Затем вы можете переопределить «change_list.html» и {% load%} тег после загрузки «admin_list».
  • Редактировать код Django.Вы пожалеете об этом позже.
  • Если вы в порядке, ни один из столбцов таблицы не является ссылкой на страницу редактирования для элемента (я не могу представить, почему вы это сделали)вы можете использовать этот уродливый хак в вашем admin.py:

    admin.site.register(YourModel, YourModelAdmin)
    admin.site._registry[YourModel].list_display_links = ['not_a_field_name',]`
    

    Поскольку модели администратора проверяются только один раз, что происходит при вызове register(), вы можете получить зарегистрированный ModelAdmin впоследствии иприсвоить ему недействительное свойство list_display_links.

...