尝试在 django admin 中显示/隐藏change_list过滤器

问题描述 投票:0回答:5

我正在尝试显示隐藏 django admin change_list.html 页面的过滤器框(右侧的灰色框)。

我尝试创建一个简单的 JavaScript 函数并将其添加到额外的头中,例如

{% extends "admin/change_list.html" %}
{% block extrastyle %}
    {{ block.super }}
    <script src="{{ STATIC_URL }}js/jquery-1.6.1.js" ></script>
<script>
    function toggle-filter() {
        $("#changelist-filter").toggle("slow");
    };
</script>
{% endblock %}

然后我添加了一个超链接并尝试让它运行该函数,如下所示

{% block object-tools %}
    <ul class="object-tools">
<li><a onclick="toggle-filter()" id="hideBut" href="#" class="viewsitelink">{% trans "Toggle Filter" %}</a></li>
    </ul>
{% endblock %}

但这没有任何作用。我怎样才能隐藏该过滤器框?

javascript jquery django django-admin
5个回答
3
投票

好吧,我所做的是在change_list.html中添加了一些javascript,如下所示:

<script type="text/javascript">
(function($) {
    $(document).ready(function($) {
        $("tr input.action-select").actions();
        $('<div id="show-filters" style="float: right;"><a href="#">Show Filters</a></p>').prependTo('div.actions');
        $('#show-filters').hide();
        $('#changelist-filter h2').html('<a style="color: white;" id="hide-filters" href="#">Filter &rarr;</a>');

        $('#show-filters').click(function() {
            $('#changelist-filter').show('fast');
            $('#changelist').addClass('filtered');
            $('#show-filters').hide();
        });

        $('#hide-filters').click( function() {
            $('#changelist-filter').hide('fast');
            $('#show-filters').show();
            $('#changelist').removeClass('filtered');
        });
    });
})(django.jQuery);
</script>

效果非常好。我找到了实际的 javascript here.


1
投票

连字符在 JavaScript 标识符中不是有效字符(您可能会发现这个问题对于有效的 JavaScript 变量名称很有用 - 请注意,变量名称和函数名称都算作“标识符”)。

尝试将函数名称更改为

toggle_filter


1
投票

您可以在 ModelAdmin 媒体类中将 javascript 添加到管理页面。在那里放置一个函数来折叠过滤器。

class MyModelAdmin(admin.ModelAdmin):
    list_filter = ['bla', 'bleh']
    class Media:
        js = ['js/list_filter_collapse.js']

这是一个页面,它提供了一种不同的方式来实现您想要的内容,而无需破解您的管理模板。对我来说,这似乎是一种更干净的方法。

最小化 django-admin 中的列表过滤器


0
投票

没有直接的答案,但 grappelli https://github.com/sehmaschine/django-grappelli 提供了开箱即用的此功能,并相应地使用 javascript 代码来显示隐藏过滤器,但您可能已经了解grapelli /HTH


0
投票

现在 2023 年,这些答案不再适用于 django 4.x,这是另一种隐藏过滤器的方法

https://stackoverflow.com/a/72766652/798832

© www.soinside.com 2019 - 2024. All rights reserved.