Yog*_*ear 5 django django-templates django-models django-admin django-rest-framework
我想为我的管理面板实现自定义分页。
我的网址如下所示:
http://localhost:8000/admin/items/?group_id=20
group_id在此 URL 上,我做了一些工作来使用参数(通过覆盖方法)过滤结果get_changelist。
页面结果是正确的,问题是我的分页结果是这样的http://localhost:8000/admin/items/?p=1,而我希望 URL 是这样的http://localhost:8000/admin/items/?group_id=20&p=1并保留参数。
基本上我想要与How to paginate Django with other getvariables?相同的结果。但使用 Django 管理。
如何将参数与分页一起保留?
我尝试过覆盖 pagination.html 文件,但没有成功。
谢谢。
编辑
我尝试过覆盖 pagination.html 但request.GET.items仍然是空的(即使我的设置文件配置良好)
{% load admin_list %}
{% load i18n %}
{% load content_extras %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
<a href="?p={{ i }}{% for key, value in request.GET.items %}{% if key != 'p' %}&{{ key }}={{ value }}{% endif %}{% endfor %}">{{ i }}</a>
{% endfor %}
{% endif %}
{{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %}
{% if show_all_url %}<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}">{% endif %}
</p>
Run Code Online (Sandbox Code Playgroud)
找到了解决方案:
1/ 覆盖changelist_view并admin.py传递额外数据
def changelist_view(self, request, extra_context=""):
response = super(ItemAdmin, self).changelist_view(request, extra_context)
group_id = request.GET.get('group_id', None)
if group_id:
extra_context = {
'group_id': group_id,
}
response.context_data.update(extra_context)
return TemplateResponse(request, "admin/changelist.html", response.context_data)
Run Code Online (Sandbox Code Playgroud)
2/changelist.html基于django管理模板创建文件(复制/粘贴)
添加{% load content_extras %}到文件顶部(第 3 行)
更改{% block pagination %}{% pagination cl %}{% endblock %}线路{% block pagination %}{% custom_pagination cl %}{% endblock %}
content_extras.py3/在文件夹下创建templatetags并写入custom_pagination函数
from django import template
from django.contrib.admin.templatetags import admin_list
register = template.Library()
@register.inclusion_tag('admin/pagination.html', takes_context=True)
def custom_pagination(context, cl):
pagination = admin_list.pagination(cl)
if 'group_id' in context:
params = (('group_id', context['group_id']),)
pagination['params'] = params
return pagination
Run Code Online (Sandbox Code Playgroud)
4/ 创建pagination.html(与 相同的位置changelist.html)
{% load admin_list %}
{% load i18n %}
{% load content_extras %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
<a href="?p={{ i }}{% for key, value in params %}{% if key != 'p' %}&{{ key }}={{ value }}{% endif %}{% endfor %}">{{ i }}</a>
{% endfor %}
{% endif %}
{{ cl.result_count }} {% if cl.result_count == 1 %}{{ cl.opts.verbose_name }}{% else %}{{ cl.opts.verbose_name_plural }}{% endif %}
{% if show_all_url %}<a href="{{ show_all_url }}" class="showall">{% trans 'Show all' %}</a>{% endif %}
{% if cl.formset and cl.result_count %}<input type="submit" name="_save" class="default" value="{% trans 'Save' %}">{% endif %}
</p>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |