Настройка администраторского списка результата Django

Как я могу изменить выходной результат Списка Результата Django Admin? Я изучал файл шаблона 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
задан Furunomoe 18 July 2010 в 03:22
поделиться

1 ответ

Нет "простого" способа сделать это, поэтому я сначала должен спросить, зачем вам вообще это нужно. Я не понимаю, почему элемент должен «явно» нарушать ваш дизайн. Элемент эквивалентен , за исключением того, что по умолчанию имеет дополнительный стиль (обычно 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" "templatetag, который вызывает указанный выше и заменяет любые в полученных значениях на s. Затем вы можете переопределить теги change_list.html и {% load%} после загрузки admin_list.
  • Отредактируйте код Django. Но потом ты пожалеешь об этом.
  • Если вас устраивает, что ни один из столбцов в таблице не является ссылкой на страницу редактирования элемента (не могу представить, почему вы это сделали), вы можете использовать этот уродливый прием в своем админке. py :

     admin.site.register (YourModel, YourModelAdmin)
    admin.site._registry [Ваша модель].list_display_links = ['not_a_field_name',] `
    

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

2
ответ дан 2 September 2019 в 22:58
поделиться
Другие вопросы по тегам:

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