Как добавить пользовательский столбец с гиперссылкой в ​​интерфейсе администратора django? - PullRequest
57 голосов
/ 28 января 2010

У меня есть интерфейс администратора django, и в списке моделей я хочу пользовательский столбец, который будет гиперссылкой с использованием одного из значений полей. По сути, одним из полей модели является URL-адрес, и я бы хотел, чтобы в столбце был этот URL в интерактивной гиперссылке. Эта ссылка должна иметь дополнительный URL-адрес, добавленный к ней как относительный путь в поле модели.

Ответы [ 2 ]

72 голосов
/ 28 января 2010

Определите метод в вашем ModelAdmin-классе и установите для его атрибута allow_tags значение True. Это позволит методу возвращать неэкранированный HTML для отображения в столбце.

Затем укажите его как запись в атрибуте ModelAdmin.list_display.

Пример:

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('my_url_field',)

    def my_url_field(self, obj):
        return '<a href="%s%s">%s</a>' % ('http://url-to-prepend.com/', obj.url_field, obj.url_field)
    my_url_field.allow_tags = True
    my_url_field.short_description = 'Column description'

См. Документацию для ModelAdmin.list_display для получения более подробной информации.

19 голосов
/ 31 июля 2015

Используйте утилиту format_html. Это исключит любой html из параметров и пометит строку как безопасную для использования в шаблонах. Атрибут метода allow_tags устарел в Django 1.9.

from django.utils.html import format_html

class MyModelAdmin(admin.ModelAdmin):
    list_display = ['show_url', ...]
    ...

    def show_url(self, obj):
        return format_html("<a href='http://pre.com{0}'>{0}</a>", obj.url)

Теперь ваши администраторы в безопасности даже в случае:

url == '<script>eval(...);</script>'

См. документацию для получения дополнительной информации.

...