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

Posted

技术标签:

【中文标题】试图在 django admin 中显示/隐藏 change_list 过滤器【英文标题】:trying to show/hide the change_list filter in django admin 【发布时间】:2011-09-10 00:36:45 【问题描述】:

我正在尝试显示隐藏 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 %

但这并没有做任何事情。我怎样才能让那个过滤框隐藏起来?

【问题讨论】:

【参考方案1】:

好的,我在 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。

【讨论】:

【参考方案2】:

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

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

这是一个页面,它以不同的方式实现您想要的,而无需破解您的管理模板。这对我来说似乎是一种更清洁的方法。

Minimize the list filter in django-admin

【讨论】:

【参考方案3】:

连字符不是 JavaScript 标识符中的有效字符(您可能会发现 this question 对有效的 JavaScript 变量名很有用 - 请注意变量名和函数名都算作“标识符”)。

尝试将您的函数名称更改为toggle_filter

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于试图在 django admin 中显示/隐藏 change_list 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

在标题 Django 管理工具中隐藏 Django 徽标/名称

如何在django-admin中隐藏特定记录的字段?

Django admin - 如何在用户编辑中隐藏一些字段?

在 django admin 中禁用/隐藏不必要的内联表单

如何隐藏 django-admin 中的某些字段?

如何从Django项目中删除或隐藏应用