breadcrumbs and page parenting
This commit is contained in:
parent
ec16c6cd56
commit
da0df5554d
|
@ -1,10 +1,13 @@
|
||||||
|
import urllib
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
from django.http import QueryDict
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from adminsortable2.admin import SortableInlineAdminMixin
|
from adminsortable2.admin import SortableInlineAdminMixin
|
||||||
|
|
||||||
from ..models import Category, Article, NavItem
|
from ..models import Category, NavItem, Page
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['CategoryAdmin', 'PageAdmin', 'NavItemInline']
|
__all__ = ['CategoryAdmin', 'PageAdmin', 'NavItemInline']
|
||||||
|
@ -27,6 +30,9 @@ class PageAdmin(admin.ModelAdmin):
|
||||||
list_filter = ('status', 'category')
|
list_filter = ('status', 'category')
|
||||||
prepopulated_fields = {"slug": ("title",)}
|
prepopulated_fields = {"slug": ("title",)}
|
||||||
|
|
||||||
|
# prepopulate fields using changelist's filters
|
||||||
|
prepopulated_filters = ('parent',)
|
||||||
|
|
||||||
search_fields = ['title', 'category__title']
|
search_fields = ['title', 'category__title']
|
||||||
fieldsets = [
|
fieldsets = [
|
||||||
('', {
|
('', {
|
||||||
|
@ -44,6 +50,30 @@ class PageAdmin(admin.ModelAdmin):
|
||||||
return mark_safe('<img src="{}"/>'.format(obj.cover.icons['64'])) \
|
return mark_safe('<img src="{}"/>'.format(obj.cover.icons['64'])) \
|
||||||
if obj.cover else ''
|
if obj.cover else ''
|
||||||
|
|
||||||
|
def get_changeform_initial_data(self, request):
|
||||||
|
data = super().get_changeform_initial_data(request)
|
||||||
|
filters = QueryDict(request.GET.get('_changelist_filters', ''))
|
||||||
|
data['parent'] = filters.get('parent', None)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def get_common_context(self, query, extra_context=None):
|
||||||
|
extra_context = extra_context or {}
|
||||||
|
parent = query.get('parent', None)
|
||||||
|
if parent is not None:
|
||||||
|
extra_context['parent'] = Page.objects.get(id=parent)
|
||||||
|
return extra_context
|
||||||
|
|
||||||
|
def add_view(self, request, form_url='', extra_context=None):
|
||||||
|
filters = QueryDict(request.GET.get('_changelist_filters', ''))
|
||||||
|
extra_context = self.get_common_context(filters, extra_context)
|
||||||
|
return super().add_view(request, form_url, extra_context)
|
||||||
|
|
||||||
|
# TODO: change_view => parent from object
|
||||||
|
|
||||||
|
def changelist_view(self, request, extra_context=None):
|
||||||
|
extra_context = self.get_common_context(request.GET, extra_context)
|
||||||
|
return super().changelist_view(request, extra_context)
|
||||||
|
|
||||||
|
|
||||||
class NavItemInline(SortableInlineAdminMixin, admin.TabularInline):
|
class NavItemInline(SortableInlineAdminMixin, admin.TabularInline):
|
||||||
model = NavItem
|
model = NavItem
|
||||||
|
|
|
@ -40,7 +40,15 @@
|
||||||
<div class="navbar-menu">
|
<div class="navbar-menu">
|
||||||
{% block usertools %}
|
{% block usertools %}
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
<a class="navbar-item" href="{% url "admin:aircox_program_changelist" %}">{% trans "Programs" %}</a>
|
<div class="navbar-item has-dropdown is-hoverable">
|
||||||
|
<a class="navbar-link" href="{% url "admin:aircox_program_changelist" %}">{% trans "Programs" %}</a>
|
||||||
|
<div class="navbar-dropdown is-boxed">
|
||||||
|
{% for program in programs %}
|
||||||
|
<a class="navbar-item" href="{% url "admin:aircox_program_change" program.pk %}">
|
||||||
|
{{ program.title }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="navbar-item has-dropdown is-hoverable">
|
<div class="navbar-item has-dropdown is-hoverable">
|
||||||
<a class="navbar-link" href="{% url "admin:aircox_article_changelist" %}">{% trans "Articles" %}</a>
|
<a class="navbar-link" href="{% url "admin:aircox_article_changelist" %}">{% trans "Articles" %}</a>
|
||||||
|
|
|
@ -29,7 +29,14 @@
|
||||||
<div class="breadcrumbs">
|
<div class="breadcrumbs">
|
||||||
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
|
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
|
||||||
› <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ cl.opts.app_config.verbose_name }}</a>
|
› <a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">{{ cl.opts.app_config.verbose_name }}</a>
|
||||||
|
{% if parent %}
|
||||||
|
› <a href="{% url cl.opts|admin_urlname:'changelist' %}">{{ cl.opts.verbose_name_plural|capfirst }}</a>
|
||||||
|
<b>› {{ parent.title }}</b>
|
||||||
|
{% else %}
|
||||||
› {{ cl.opts.verbose_name_plural|capfirst }}
|
› {{ cl.opts.verbose_name_plural|capfirst }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block filters %}
|
{% block filters %}
|
||||||
|
{# FIXME #}
|
||||||
{% if filter_categories %}
|
{% if filter_categories %}
|
||||||
<form method="GET" action="" class="navbar-menu">
|
<form method="GET" action="" class="navbar-menu">
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
|
|
Loading…
Reference in New Issue
Block a user