Расширение админки django с помощью представления без модели

У меня есть настраиваемое представление администратора - мое приложение называется virtual:

class VirtualAdminSite(admin.AdminSite):
    index_template = "virtual/admin_index.html"

    def index(self, request, extra_context=None):
        extra_context = extra_context or {}
        return super().index(request, extra_context)

    def get_urls(self):
        urls = super().get_urls()
        my_urls = path("virtual/info/", self.admin_view(self.info))
        urls.append(my_urls)
        return urls

    def info(self, request):
        return HttpResponse("hello")

и я хочу иметь возможность включить url во вновь созданный admin_index.html, поэтому я сделал так (пожалуйста, не обращайте внимания, что я использовал HTMX для загрузки, потому что это короче, чем AJAX в ванильном JS):

{% block content %}
    <div id="content-main">
        {% include "admin/app_list.html" with app_list=app_list show_changelinks=True %}

        Info: <h3 hx-get="{% url 'info' %}" hx-trigger="load"> loading ... </h3> 
    </div>
{% endblock %}

но я получаю: Reverse for 'info' not found. 'info' is not a valid view function or pattern name ошибка. Я уже пробовал добавлять admin/ в путь и удалять virtual, но все безуспешно.

If I recall correctly, the .urls of a site by default pases the url patterns as well as the app_namespace which is by default admin, and the instancce namespace, which is the name of the site you attached. Indeed, in the source code [GitHub], we see:

@property 
def urls(self):
    return self.get_urls(), "admin", self.name

Таким образом, вы ссылаетесь на вид с:

{% url 'admin:info' %}

Дополнительно необходимо указать имя пути:

my_urls = path('virtual/info/', self.admin_view(self.info), name='info')

Последняя проблема оказалась в том, что вы добавили путь в конец списка, а перед ним есть шаблон "catch all", поэтому его можно вставить перед ним или хотя бы перед "catch all":

def get_urls(self):
    urls = super().get_urls()
    my_urls = path('virtual/info/', self.admin_view(self.info), name='info')
    urls.insert(0, my_urls)
    return urls
Вернуться на верх