很好的问题,我认为这可能是 Wagtail 的 ModelAdmin 的一个潜在问题,提出一个问题可能会很好。有一个与“折叠状态”here 相关的类似问题。
选项 1 - CSS 解决方法
一种快速的、仅限 css 的解决方法是将内容“移动”到按钮附近的顶部。您可能想要改进以在不同的视口断点内工作,而且这不是最容易访问的解决方案,但它可以让您快速到达那里。
您可以通过 index_view_extra_css 将 css 添加到 ModelAdmin 索引列表中。
下面的示例方法假设这是桌面视图,用户可以“悬停”在移动到标题的列表过滤器上。
wagtail_hooks.py
class opportunitiesAdmin(ModelAdmin):
model = opportunities
#...
index_view_extra_css = ('css/modeladmin-index.css',)
static/css/modeladmin-index.css
@media screen and (min-width: 50em) {
.changelist-filter {
position: fixed;
top: 0;
right: 15rem;
z-index: 1;
background: white;
transform: translateY(-100vh);
}
.changelist-filter h2 {
margin-top: 1rem;
transform: translateY(100vh);
}
.changelist-filter:hover {
transform: none;
}
.changelist-filter:hover h2 {
margin-top: 0;
transform: none;
}
}
选项 2 - 修改模板
您可以更进一步,修改使用的模板(基于每个模型或所有索引页面)。请参阅ModelAdmin Overriding Templates docs。
对于底层的index.html模板,您可以查看contrib/modeladmin/templates/modeladmin/index.html的来源。
下面的示例扩展了默认的索引模板,并使块filters 不呈现任何内容。然后,查看源代码,复制过滤器的渲染方式并将它们放入块 header_extra。
首先,内容已被放入具有属性data-dropdown 的div 中,该属性将在下拉列表中呈现内部内容,第一个元素是“触发器”,第二个元素是选项。
注意:这是一个粗略的示例,需要进一步的样式和元素属性。
templates/modeladmin/index.html
{% extends 'modeladmin/index.html' %}
{% load i18n modeladmin_tags %}
{% block header_extra %}
{% if view.has_filters and all_count %}
<div {{ self.attrs }} class="c-dropdown" data-dropdown>
<a href="javascript:void(0)" class="c-dropdown__button u-btn-current">
<strong>{% trans 'Filter' %}</strong>
<div data-dropdown-toggle="" class="o-icon c-dropdown__toggle [ icon icon-arrow-down ]"></div>
</a>
<div class="c-dropdown__menu u-toggle u-arrow u-arrow--tl u-background">
{% for spec in view.filter_specs %}{% admin_list_filter view spec %}{% endfor %}
</div>
</div>
{% endif %}
{{ block.super }}
{% endblock %}
{% block filters %}
{% comment %} make content blank {% endcomment %}
{% endblock %}