【问题标题】:trying to show/hide the change_list filter in django admin试图在 django admin 中显示/隐藏 change_list 过滤器
【发布时间】: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 %}

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

【问题讨论】:

    标签: javascript jquery django django-admin


    【解决方案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

          【讨论】:

            猜你喜欢
            • 2014-02-03
            • 2018-04-20
            • 2014-09-17
            • 2014-01-30
            • 1970-01-01
            • 2017-01-05
            • 2015-08-07
            • 1970-01-01
            • 2015-10-03
            相关资源
            最近更新 更多