Django Admin Dashboard Görünüm Eklemek

Baysan
3 min readJul 19, 2020

--

Merhabalar bu yazımda sizlere Django Admin Dashboard’a nasıl görünüm (view) ekleyebileceğimizi anlatmaya çalışacağım.

Extend ettiğimiz şablonları hızlıca geçeceğim. Şablonları ve Dashboard’ı özelleştirmeyi anlattığım, ‘Django Admin Dashboard Görünümleri Özelleştirmek’ adlı yazımı okuyabilirsiniz.

Bu yazıyı bir önceki yazımın üzerine yazıyorum. Bu sebeple ekran görüntülerinde default olarak gelen dashboard stilleri gözükmemektedir. Aynı proje üzerine yazdığımdan örneklerimi musteri app’i ve Musteri modeli üzerinden göstermeye çalışacağım.

Senaryo

musteri app altındaki Musteri modeline ait olan change_form.html’i özelleştireceğim. form_top alanına Mail Gönder butonu koyacağım ve bu ilgili Musteri nesnesini kendi eklediğimiz mail-gonder view’ına redirect edecek.

Custom Admin View Yazalım

Öncelikle ilgili app’imizin altında admin_views.py dosyasını oluşturuyoruz.

Senaryom gereği bu view’a parametre olarak gelen pk ile müşterimi seçeceğim ve view’a göndereceğim. İlgili kod bloğunu admin_views.py içerisine ekliyoruz.

from django.shortcuts import render, get_object_or_404
from django.contrib.admin.views.decorators import staff_member_required
from musteri.models import Musteri


@staff_member_required
def mail_gonder(request, pk):
musteri = get_object_or_404(Musteri, pk=pk)
context = {
'musteri': musteri
}
return render(request, 'admin/musteri/mail_yolla.html', context=context)

Başarılı bir şekilde view’ımızı yazdık. Yazdığımız view’ı urls.py içerisine tanıtıyorum.

include fonksiyonu ve ayrı bir admin_urls.py dosyası oluşturularak daha güzel bir kod elde edilebilir. Fakat ben göstermek için sadece 1 adet view yazacağımdan settings.py içerisindeki kök urls.py içerisinde tanıtacağım.

Yazdığım view’ı urls.py içerisinde tanıtıyorum. mail_gonder olarak ilgili path’imi isimlendiriyorum ki birazdan change_form.html içerisinde redirect işlemini daha rahat yapabilelim.

urlpatterns = [
path('panel/', admin.site.urls),
path('panel/musteri/mail-gonder/<int:pk>', mail_gonder, name='mail_gonder'),
]

İlgili view’ım için template dosyasını oluşturacağım. admin/musteri/mail_yolla.html dosyasını oluşturuyorum.

İlgili kod bloğumu dosyamın içerisine ekliyorum. Ben kolay olması açısından basit bir şekilde html yazıp ilgili datayı yakalayabildiğimizi göstermeye çalışacağım. Siz isterseniz form dosyasındaki block’ları özelleştirerek daha şık ve işlevsel bir sayfa yazabilirsiniz.

{% extends "admin/base_site.html" %}


{% block content_title %}
<h1><b>Mail Göndermek İstediğiniz Müşteri</b></h1>

{% endblock %}
{% block content %}
<h1>Müşteri : {{ musteri }}</h1>


{% endblock %}

Başarılı bir şekilde custom view’ımızı oluşturduk. Şimdi test etme zamanı. Url’ e ilgili path’i (http://127.0.0.1:8000/panel/musteri/mail-gonder/1) yazıp bir bakalım neler olmuş.

Tebrikler, view’ımız çalışıyor. Şimdi sıra geldi change_form.html’i extend ederek bu sayfaya redirect gerçekleştirmeye.

Musteri Modeli İçin change_form.html Özelleştirelim

Bunun için ilk yazımda bahsettiğim şemayı kullanarak templates altına change_form.html dosyasını oluşturuyorum.

admin/app_name/model_name/template_name.html

Şablon dosyamı oluşturduktan sonra change_form.html ‘i extend ediyoruz. Ardından form_top block’una ilgili butonumuzu ekliyoruz.

Burada önemli olan nokta şudur ki admin app ile birlikte context’ten ilgili view’a gelen nesneye (tekil) {{original}} keyword’u ile erişebiliyoruz.

{% extends 'admin/change_form.html' %}
{% block form_top %}
<button style="background-color: blueviolet; height: 35px;">
<a href="{% url 'mail_gonder' pk=original.pk %}">Mail Gönder</a>

</button>
{% endblock %}

Musteri modelimiz için Mail Gönder adlı butonu eklemeyi başardık. Kısa ve öz olması açısından kodları kısa tutmaya çalıştım. Django Admin Dashboard’ını özelleştirip dilediğimiz şekilde kullanabiliriz. Umarım faydalı olmuştur.

İlgili yazıya ait çektiğim video linki: https://youtu.be/qzmaCfKjm1E

--

--

Baysan

Lifelong learner & Developer. I use technology that helps me. mebaysan.com