I want to add custom HTML to Django Admin Inlines

Django
2021-01-26 17:21 (3 years ago) ytyng

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 %}
Currently unrated

Comments

Archive

2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011