代码之家  ›  专栏  ›  技术社区  ›  Furunomoe

自定义Django管理结果列表

  •  1
  • Furunomoe  · 技术社区  · 14 年前

    更改结果_列表.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>
    

    很明显 td公司 ?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Aram Dulyan    14 年前

    没有“简单”的方法可以做到这一点,所以我首先要问你为什么要这么做。我不明白为什么 <th> <th> 元素等效于 <td> ,但它在默认情况下具有额外的样式(通常 font-weight: bold; text-align: center;

    也就是说,这里有一些途径可以考虑。第169行(Django 1.2.1)确定th/td选项 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))
    

    • 定义一个“items_for_result”templatetag,它调用上面的模板标记并替换任何 <th> s在产生的值中 <td> s、 然后你可以覆盖“改变_列表.html和{%load%}加载了“管理列表”之后的标记。
    • 编辑Django代码。不过你以后会后悔的。
    • 如果您不介意表中的任何列都不是该项的编辑页的链接(我无法想象您为什么会这样做),那么您可以在 admin.py

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

      因为管理模型只验证一次,当 register() 调用时,可以获取注册的 ModelAdmin 然后给它一个无效的 list_display_links 财产。