I want to add custom HTML to Django Admin Inlines
Django
2021-01-26 08:21 (5 years ago)

If you want to add custom HTML to Django Admin Inlines
Defining custom properties in the Admin or model class and attempting to handle them with Inline class fields= or fieldsets= won’t work well.
It’s better to simply extend the inline template.
class MyModelInline(admin.StackedInline):
template = 'admin/my_app/my_model_inline.html'
model = models.MyModel
extra = ...
The original template exists as admin/edit_inline/stacked.html, but since this template is not designed for inheritance and lacks {% block %} tags, it cannot be used as is.
Therefore, it is better to copy it and create an inheritable inline template.
Copied admin/edit_inline/stacked.html to create
admin/edit_inline/stacked_extendable.html
{% load i18n admin_urls static %}
{% comment %}
Added inline_header, inline_footer blocks
to the default stacked inline template
to make it usable through inheritance
{% endcomment %}
<div class="js-inline-admin-formset inline-group"
id="{{ inline_admin_formset.formset.prefix }}-group"
data-inline-type="stacked"
data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
<fieldset class="module {{ inline_admin_formset.classes }}">
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
{{ inline_admin_formset.formset.management_form }}
{{ inline_admin_formset.formset.non_form_errors }}
{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<h3><b>{{ inline_admin_formset.opts.verbose_name|capfirst }}:</b> <span class="inline_label">{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} <a href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}" class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">{% if inline_admin_formset.has_change_permission %}{% translate "Change" %}{% else %}{% translate "View" %}{% endif %}</a>{% endif %}
{% else %}#{{ forloop.counter }}{% endif %}</span>
{% if inline_admin_form.show_url %}<a href="{{ inline_admin_form.absolute_url }}">{% translate "View on site" %}</a>{% endif %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}<span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
</h3>
{# Added #}
{% block inline_header %}{% endblock %}
{% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
{% for fieldset in inline_admin_form %}
{% include "admin/includes/fieldset.html" %}
{% endfor %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
{# Added #}
{% block inline_footer %}{% endblock %}
</div>
{% endfor %}
</fieldset>
</div>
Example of inheritance
{% extends 'admin/edit_inline/stacked_extendable.html' %}
{% block inline_footer %}
{% if inline_admin_form.original %}
<p>
<a href="{{ inline_admin_form.original.admin_change_url }}" target="_blank">
View details ›</a>
</p>
{% endif %}
{% endblock %} Please rate this article
Currently unrated
The author runs the application development company Cyberneura.
We look forward to discussing your development needs.
We look forward to discussing your development needs.