自定义Django管理结果列表

时间:2010-07-18 03:22:55

标签: django django-admin django-templates

如何更改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 个答案:

答案 0 :(得分:2)

没有“简单”的方法,所以我必须首先问你为什么要完全这样做。我不明白为什么<th>元素应该“明显”破坏你的设计。 <th>元素相当于<td>,但默认情况下会有额外的样式(通常为font-weight: bold; text-align: center;)。您应该能够在CSS中对此进行说明。

那就是说,这里有一些途径可以看。 th / td选项在django.contrib.admin.templatetags.admin_list.py的第169行(Django 1.2.1)上确定。以下是它出现的上下文的摘要摘要:

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> s替换所产生的值中的任何<td> s。然后,您可以在加载“admin_list”后覆盖“change_list.html”和{%load%}标记。
  • 编辑Django代码。你以后会后悔的。
  • 如果你没有,表格中的任何一列都不是该项目编辑页面的链接(我无法想象为什么你会这样做),你可以在你的{{{{{ 1}}:

    admin.py

    由于管理模型仅验证一次,这在调用admin.site.register(YourModel, YourModelAdmin) admin.site._registry[YourModel].list_display_links = ['not_a_field_name',]` 时发生,您可以在之后获取已注册的register()并为其提供无效的ModelAdmin属性。