Элегантный способ добавить ссылку рядом с именем APP в Django Admin
См. фото ниже, я хочу добавить ссылку рядом с "APP1", я искал в google и кажется только один способ сделать это, переопределив шаблон администратора app_list.html
затем посмотреть, является ли имя приложения "APP1", затем добавить ссылку. Не похоже, что есть секции, определенные для меня, чтобы точно переопределить конкретную секцию, так что мне придется скопировать и вставить весь шаблон app_list.html
в мой проект, это может быть немного больно для будущих обновлений, когда встроенный шаблон изменился.
<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>')
Так что, кроме переопределения шаблона, есть ли что-нибудь еще, что я могу сделать?
Я понял, что вы хотите изменить ярлык приложения на странице администратора. Та часть ярлыка приложения, которая содержит данные из ярлыка Open Source кода. Страница администрирования Django генерируется через класс AdminSite.
И я подтвердил, что метод создания данных, связанных с ярлыком приложения, - это _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'