如何更改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 ?
答案 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值的行为,因此您拥有的一些选项是:
<th>
s替换所产生的值中的任何<td>
s。然后,您可以在加载“admin_list”后覆盖“change_list.html”和{%load%}标记。如果你没有,表格中的任何一列都不是该项目编辑页面的链接(我无法想象为什么你会这样做),你可以在你的{{{{{ 1}}:
admin.py
由于管理模型仅验证一次,这在调用admin.site.register(YourModel, YourModelAdmin)
admin.site._registry[YourModel].list_display_links = ['not_a_field_name',]`
时发生,您可以在之后获取已注册的register()
并为其提供无效的ModelAdmin
属性。