我正在尝试显示隐藏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 %}
但这没有做任何事情。如何隐藏?过滤器?
答案 0 :(得分:2)
好的我做的是我在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 →</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 :(得分:1)
您可以在ModelAdmin媒体类中向管理页面添加javascript。在那里放置一个函数来折叠过滤器。
class MyModelAdmin(admin.ModelAdmin):
list_filter = ['bla', 'bleh']
class Media:
js = ['js/list_filter_collapse.js']
这是一个以不同方式实现您想要的方式的页面,而不会破坏您的管理模板。这对我来说似乎更清洁。
答案 2 :(得分:0)
连字符在JavaScript标识符中不是有效字符(您可能会在有效的JavaScript变量名称上找到this question - 请注意,变量名称和函数名称都算作“标识符”)。
尝试将您的函数名称更改为toggle_filter
。
答案 3 :(得分:0)
没有直接的答案,但grappelli https://github.com/sehmaschine/django-grappelli提供了开箱即用的此功能,并相应地使用javascript代码来隐藏过滤器,但您可能已经了解了grapelli / HTH