Элегантный способ добавить ссылку рядом с именем APP в Django Admin

См. фото ниже, я хочу добавить ссылку рядом с "APP1", я искал в google и кажется только один способ сделать это, переопределив шаблон администратора app_list.html затем посмотреть, является ли имя приложения "APP1", затем добавить ссылку. Не похоже, что есть секции, определенные для меня, чтобы точно переопределить конкретную секцию, так что мне придется скопировать и вставить весь шаблон app_list.html в мой проект, это может быть немного больно для будущих обновлений, когда встроенный шаблон изменился.

enter image description here

        <caption>
          <a href="{{ app.app_url }}" class="section" title="{% blocktranslate with name=app.name %}Models in the {{ name }} application{% endblocktranslate %}">{{ app.name }}</a>
        </caption>

Я пробовал подход verbose_name, но он не хотел нормально рендериться даже с mark_safe(), не говоря уже о том, что этот verbose_name будет использоваться и вызывать еще больше проблем, поэтому я отказываюсь от этого подхода.

verbose_name = mark_safe('APP1 <a href="/somehwere">link</a>')

enter image description here

Так что, кроме переопределения шаблона, есть ли что-нибудь еще, что я могу сделать?

Я понял, что вы хотите изменить ярлык приложения на странице администратора. Та часть ярлыка приложения, которая содержит данные из ярлыка Open Source кода. Страница администрирования Django генерируется через класс AdminSite.

AdminSite Class

И я подтвердил, что метод создания данных, связанных с ярлыком приложения, - это _build_app_dict.

_build_app_dict

                app_dict[app_label] = {
                    "name": apps.get_app_config(app_label).verbose_name,
                    "app_label": app_label,
                    "app_url": reverse(
                        "admin:app_list",
                        kwargs={"app_label": app_label},
                        current_app=self.name,
                    ),
                    "has_module_perms": has_module_perms,
                    "models": [model_dict],
                }

Этот код является частью _build_app_dict, где значение "name" становится данными ярлыка приложения на странице администратора.

Поэтому вы можете присвоить нужное значение переменной verbose_name класса AppConfig в apps.py того приложения, которое хотите изменить.

подобно этому.

from django.apps import AppConfig


class ProductsConfig(AppConfig):
    verbose_name = 'hello world'
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'products'

enter image description here

Вернуться на верх