4

Я хочу overide Джанго по умолчанию шаблон админ фильтр использовать свой собственный шаблон на основе этого:Overide Джанго администратора шаблоны ListFilter

https://github.com/feincms/feincms/blob/master/feincms/templates/admin/filter.html

Я написал свой собственный SimpleListFilter класс, наследующий django.contrib.admin.SimpleListFilter

class PublisherStateFilter(admin.SimpleListFilter): 
    title = _('Status') 
    parameter_name = 'status' 
    template = 'admin/blogitty/filter.html' 

    [...] 

Это прекрасно работает.

Dropdown Select Filter

Однако я хотел бы использовать тот же шаблон для всех администраторов фильтров. Есть ли способ обойти все шаблоны фильтров для данного приложения, без необходимости определять пользовательские ListFilter для каждого отношения ForeignKey и ManyToMany.

С моим проектом как blogitty. Я попробовал оба варианта шаблона DIR:

blogitty/templates/admin/filter.html 

И:

blogitty/templates/admin/blogitty/filter.html 

Не повезло :-(

Просматривая исходный код:

https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1030

return TemplateResponse(request, form_template or [ 
     "admin/%s/%s/change_form.html" % (app_label, opts.model_name), 
     "admin/%s/change_form.html" % app_label, 
     "admin/change_form.html" 
    ], context) 

https://github.com/django/django/blob/master/django/contrib/admin/options.py#L1569

return TemplateResponse(request, self.change_list_template or [ 
     'admin/%s/%s/change_list.html' % (app_label, opts.model_name), 
     'admin/%s/change_list.html' % app_label, 
     'admin/change_list.html' 
    ], context) 

Насколько я понимаю. Django ModelAdmin проверяет несколько путей для рендеринга changeform или changelist для данной модели. Однако для ListFilter никаких дополнительных проверок для загрузки пользовательских шаблонов не производится.

https://github.com/django/django/blob/master/django/contrib/admin/filters.py#L60

class ListFilter(object): 
    title = None 
    template = 'admin/filter.html' 

Update - Настройки TEMPLATE_DIRS:

BASE_DIR = dirname(dirname(__file__))  

TEMPLATE_DIRS = (
    join(BASE_DIR, 'templates'), 
) 

макет проекта основан на cookiecutter-django Даниэль Гринфельд

ответ

2

Это может помочь

class ClassFilter1(admin.ModelAdmin): 
    title = 'Filter Class' 
    parameter_name = 'filter-class' 

    def lookups(self, request, model_admin): 
     # Your Lookups 

    def queryset(self, request, queryset): 
     # Your Lookups 

class FilterClass(admin.ModelAdmin): 
    list_filter = (ClassFilter1, ClassFilter2) 
    change_list_template = 'polls/change_list_template.html' 

И overide в change_list_template.html и поместите .html в polls/templates/polls

 Смежные вопросы

  • Нет связанных вопросов^_^