Własne strony w Panelu Admina Django

Przepis na tworzenie zintegrowanych z panelem admina własnych podstron i widoków.

Na blogu Beardy Geek pojawił się ciekawy artykuł opisujący jak dodać podstrony do panelu admina Django. Porusza on nie tylko podpięcie własnych widoków pod URLe wewnątrz /admin/, lecz także wykorzystanie szablonów i wewnętrznych elementów związanych z tą aplikacją.

URLe

Chcąc dodać własny widok musimy podpiąć go w urls.py nad regułą mapującą panel admina pod /admin/:
(r'^admin/mypage/$', 'myapp.views.my_admin_view'),
(r'^admin/', include(admin.site.urls)),

Widok

Możemy wykorzystać dekorator staff_member_required by określić dostęp dla użytkowników posiadających flagę is_staff i mających normalnie dostęp do PA. Ważne jest też by przekazywać RequestContext do renderowanego szablonu:
from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_admin_view(request):
    # kod widoku
    return render_to_response('my_template.html',
                              context_instance=RequestContext(request))

Szablon

Dla identycznego wyglądu nasz szablon powinien wykorzystywać szablon panelu admina:
{% extends 'admin/base_site.html' %}
Dodatkowo dostęp do statyki PA, jak i wielojęzyczności zapewni nam:
{% load i18n adminmedia %}

Dodatkowe style można dodać do {% block extrastyle %} a dodatkowy JS w {% block extrahead %}.

Taże możemy zadbać o górną nawigację breadcrumbs podając odpowiednie linki, np:
{% block breadcrumbs %}<div class="breadcrumbs"><a href="/admin/">{% trans "Home" %}</a> > Mój Widok</div>{% endblock %}
W bloku content możemy umieścić zawartość naszego widoku. Warto wykorzystać style i kod HTML stosowany przez widoku PA (tabela rekordów, lista aplikacji itd.) podglądając kod standardowych stron PA. Szablony znajdziemy w django/contrib/admin/templates.

Dodatki

Można także nadpisywać szablony PA własnymi. W katalogu z szablonami projektu stwórz katalog admin i umieść w nim wszystkie szablony jakie mają być nadpisane. Np. nadpisując index.html możemy dodać dodatkowy prawy blok z linkami do dodanych przez nas podstron. Pod divem content-related możemy dodać
<div class="module">
  <h2>Dodatkowe strony</h2>
    <ul class="actionlist">
      <li class="changelink">
        <a href="/admin/mypage/">Mój widok</a>
      </li>
    </ul>
</div>
blog comments powered by Disqus

Kategorie

Strony