1. Home
  2. Django Admin Unfold
  3. Installation And Configur...
  4. custom dashboard

custom dashboard

Django Unfold Admin এ Custom Page তৈরি করার সম্পূর্ণ টিউটোরিয়াল


Unfold Admin Custom Page Tutorial

Django Unfold Admin এ custom page তৈরি করার সহজ ও প্রোডাকশন-ready গাইড।


📁 File Structure

your_project/
├── config/
   ├── settings.py      # UNFOLD config
   └── urls.py          # URL registration
├── your_app/
   ├── views.py         # Custom view
   └── templates/
       └── admin/
           └── your_app/
               └── my_page.html   # Template

Step 1: View তৈরি করো

File: your_app/views.py

from django.contrib import admin
from django.contrib.admin.views.decorators import staff_member_required
from django.shortcuts import render


@staff_member_required
def my_custom_view(request):
    """Custom admin page"""

    # IMPORTANT: admin.site.each_context(request) MUST include করতে হবে
    # এটা ছাড়া sidebar, topbar কিছুই দেখাবে না!

    context = {
        **admin.site.each_context(request),  # ⭐ REQUIRED
        'title': 'My Custom Page',
        'subtitle': 'This is my custom admin page',
        'items': ['Item 1', 'Item 2', 'Item 3'],
        'count': 100,
    }

    return render(request, 'admin/your_app/my_page.html', context)

🔑 Key Points

  • @staff_member_required → শুধু admin/staff users access পাবে
  • **admin.site.each_context(request)এটা MUST
    • Sidebar
    • Topbar
    • User menu
    • Theme layout
      👉 এগুলো সব এর উপর depend করে

Step 2: URL Register করো

File: config/urls.py

from django.contrib import admin
from django.urls import path
from your_app.views import my_custom_view


urlpatterns = [
    # ⭐ Custom URL অবশ্যই admin/ এর আগে রাখতে হবে
    path('admin/my-page/', my_custom_view, name='my-custom-page'),

    path('admin/', admin.site.urls),
]

🔑 Key Points

  • Custom URL অবশ্যই admin/ এর আগে
  • URL name (my-custom-page) sidebar link এর জন্য দরকার

Step 3: Template তৈরি করো

File:
your_app/templates/admin/your_app/my_page.html

{% extends "unfold/layouts/base.html" %}
{% load i18n unfold %}

{% block breadcrumbs %}
<div class="breadcrumbs">
    <a href="{% url 'admin:index' %}">Home</a>
    <span class="separator"></span>
    <span>{{ title }}</span>
</div>
{% endblock %}

{% block content %}
<div class="space-y-6">

    <!-- Page Header -->
    <div class="mb-6">
        <h1 class="text-2xl font-bold text-foreground">{{ title }}</h1>
        <p class="text-sm text-muted-foreground">{{ subtitle }}</p>
    </div>

    <!-- Stats Cards -->
    <div class="grid grid-cols-1 md:grid-cols-3 gap-4">
        <div class="rounded-xl border bg-card p-6">
            <p class="text-sm text-muted-foreground">Total Count</p>
            <p class="text-3xl font-bold text-primary">{{ count }}</p>
        </div>
    </div>

    <!-- Data Table -->
    <div class="rounded-xl border bg-card overflow-hidden">
        <div class="px-5 py-4 border-b">
            <h2 class="font-semibold">Items List</h2>
        </div>
        <div class="p-5">
            {% if items %}
            <ul class="space-y-2">
                {% for item in items %}
                <li class="p-3 bg-muted/50 rounded-lg">
                    {{ item }}
                </li>
                {% endfor %}
            </ul>
            {% else %}
            <p class="text-muted-foreground text-center py-8">
                No items found
            </p>
            {% endif %}
        </div>
    </div>

</div>
{% endblock %}

🔑 Key Points

  • {% extends "unfold/layouts/base.html" %}MUST
  • {% load i18n unfold %} → Unfold template tags
  • Tailwind CSS fully supported (Unfold default)

Step 4: Sidebar এ Link যোগ করো

File: config/settings.py

from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _


UNFOLD = {
    "SITE_TITLE": "My Admin Panel",
    "SITE_HEADER": "My Administration",

    "SIDEBAR": {
        "show_search": True,
        "show_all_applications": False,
        "navigation": [

            # Custom Pages
            {
                "title": _("Custom Pages"),
                "separator": True,
                "items": [
                    {
                        "title": _("My Custom Page"),
                        "icon": "dashboard",
                        "link": lambda request: reverse_lazy("my-custom-page"),
                    },
                ],
            },

            # Models
            {
                "title": _("Management"),
                "separator": True,
                "items": [
                    {
                        "title": _("Users"),
                        "icon": "person",
                        "link": lambda request: reverse_lazy(
                            "admin:auth_user_changelist"
                        ),
                    },
                ],
            },
        ],
    },
}

🔑 Key Points

  • Sidebar link দিতে হবেlambda request: reverse_lazy("url-name")
  • icon → Google Material Icons name

📋 Quick Checklist

ComponentRequiredWhy
admin.site.each_context(request)✅ YESSidebar, topbar, user menu
{% extends "unfold/layouts/base.html" %}✅ YESUnfold layout
{% load unfold %}✅ YESUnfold tags
@staff_member_required✅ YESSecurity
URL before admin/✅ YESRouting
Sidebar navigation✅ YESVisibility

🎨 Common Tailwind Classes (Unfold)

<!-- Card -->
<div class="rounded-xl border bg-card p-6"></div>

<!-- Muted text -->
<p class="text-muted-foreground"></p>

<!-- Primary color -->
<span class="text-primary"></span>

<!-- Grid -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4"></div>

<!-- Vertical spacing -->
<div class="space-y-6"></div>

<!-- Badge -->
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full
             text-xs font-medium bg-green-100 text-green-800">
    Active
</span>

🔗 Material Icons (Sidebar)

  • dashboard → Dashboard
  • person → User
  • group → Group
  • settings → Settings
  • assessment → Reports
  • schedule → Time / Schedule
  • photo_camera → Media
  • task_alt → Tasks

👉 Full list:
https://fonts.google.com/icons


✅ Done!

এই ৪টা step follow করলেই:

  • ✅ Unfold Admin layout intact থাকবে
  • ✅ Sidebar / Topbar কাজ করবে
  • ✅ Fully secure (staff only)
  • ✅ Production-ready custom page তৈরি হবে

চাও তো আমি এটাকে

  • 📘 Blog post
  • 📄 PDF guide
  • 🧵 Medium article
  • 🧩 Reusable boilerplate repo

এগুলোর যেকোনো ফরম্যাটে করে দিতে পারি।

How can we help?