মনেকরি আমরা একটি app এ একটি মডেল বানিয়েছি এবং admin.py ফাইলের মাধ্যমে মডেলকে অ্যাডমিন প্যানেলে যোগ করেছি তাহলে তো ড্যাঙ্গ এর ডিফল্ট ডিজাইন এর টেমপ্লেট শো করবে কিন্তু আমরা তো চাই আমাদের নিজেদের html এর ডিজাইন শো করতে এজন্য আমাদের যা যা করতে হবে।
টেম্পলেট বানানো :
আমাদের app ফোল্ডারে templates ফোল্ডারের মধ্যে admin নামে ফোল্ডার তৈরী করি
admin ফোল্ডারের মধ্যে app এর নামে ফোল্ডার বানাই
app ফোল্ডারে মডেল এর নামে ফোল্ডার বানাই
মডেল ফোল্ডারে html টেম্পলেট বানাই
মনেকরি আমাদের app এর নাম salesapp আর মডেল এর নাম item তাহলে ফোল্ডার স্ট্রাকটার হবে নিচের মত
এবার মডেলকে অ্যাডমিন প্যানেলে যোগ করার সময় টেম্পলেট টি বলে দেই
Copy from django.contrib import admin
from .models import SalesInfo
class SalesInfoAdmin(admin.ModelAdmin):
change_form_template = 'admin/salesapp/item/change_form.html'
admin.site.register(SalesInfo, SalesInfoAdmin)
এখন কথা হলো মনের মত যেভাবে খুশি করলে কিছু কিছু এরর শো করবে তার চেয়ে ভালো হয় django এর admin ফোল্ডারে html টেম্পলেট আছে ঐটা আমরা ওভার রাইট করবো এজন্য পাইথনের ইনস্টল ডিরেক্টরি থেকে Python\Python311-32\Lib\site-packages\django\contrib\admin\templates\admin ফোল্ডারে গেলে change_form.html নামে একটি ফাইল আছে ঐটা কপি করে আমাদের টেম্প্লেটস ফোল্ডারে পেস্ট করে এডিট করবো।
breadcrumbs
Copy {% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
› <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
› {% if has_view_permission %}<a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>{% else %}{{ opts.verbose_name_plural|capfirst }}{% endif %}
› {% if add %}{% blocktranslate with name=opts.verbose_name %}Add {{ name }}{% endblocktranslate %}{% else %}{{ original|truncatewords:"18" }}{% endif %}
</div>
{% endblock %}
{% endif %}
Add Button
Copy {% block object-tools %}
{% if change and not is_popup %}
<ul class="object-tools">
{% block object-tools-items %}
{% change_form_object_tools %}
{% endblock %}
</ul>
{% endif %}
{% endblock %}
Copy {% include "admin/includes/fieldset.html" %}
Form
Copy <form class="row" {% if has_file_field %}enctype="multipart/form-data" {% endif %}{% if form_url %}action="{{ form_url }}" {% endif %}method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
{% if is_popup %}<input type="hidden" name="{{ is_popup_var }}" value="1">{% endif %}
{% if to_field %}<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">{% endif %}
{% if save_on_top %}{% block submit_buttons_top %}{% submit_row %}{% endblock %}{% endif %}
{% if errors %}
<p class="errornote">
{% blocktranslate count counter=errors|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktranslate %}
</p>
{{ adminform.form.non_field_errors }}
{% endif %}
</form>
উপরের এই কোডের জায়গায় অ্যাডমিন ফোল্ডারের include ফোল্ডার থেকে fieldset.html নামের ফাইল থেকে কোড কপি করে কাস্টমাইজ করবো
Block Field Set
Copy {% block field_sets %}
{% for fieldset in adminform %}
{% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
{% if fieldset.description %}
<div class="description">{{ fieldset.description|safe }}</div>
{% endif %}
{% for line in fieldset %}
{% if line.fields|length == 1 %}{{ line.errors }}{% else %}<div class="">{% endif %}
{% for field in line %}
{% if not line.fields|length == 1 and not field.is_readonly %}{{ field.errors }}{% endif %}
<div class="col-md-6">
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<div class="readonly">{{ field.contents }}</div>
{% else %}
{{ field.field }}
{% endif %}
{% endif %}
</div>
{% if field.field.help_text %}
<div class="help"{% if field.field.id_for_label %} id="{{ field.field.id_for_label }}_helptext"{% endif %}>
<div>{{ field.field.help_text|safe }}</div>
</div>
{% endif %}
{% endfor %}
{% if not line.fields|length == 1 %}</div>{% endif %}
{% endfor %}
{% endfor %}
{% endblock %}
Submit Button
Copy {% block submit_buttons_bottom %}
<div class="submit-row">
<div class="row">
<div class="col-12">
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="btn btn-primary"{% if show_save_as %} name="_saveasnew"{% endif %}>{% endif %}
{% if show_save_as %}<input type="submit" value="{% trans 'Save as new' %}" class="btn btn-secondary" name="_saveasnew">{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" class="btn btn-secondary" name="_addanother">{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% trans 'Save and continue editing' %}" class="btn btn-secondary" name="_continue">{% endif %}
<a href="{% url opts|admin_urlname:'changelist' %}" class="btn btn-secondary ms-2">{% trans "Cancel" %}</a>
</div>
</div>
</div>
{% endblock %}