Подтвердить что ты не робот

Как добавить пользовательский столбец с гиперссылкой в ​​интерфейс администратора django?

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

4b9b3361

Ответ 1

Определите метод в вашем классе 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.

Ответ 2

Используйте утилиту 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)

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

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

Подробнее см. документацию.