Django возвращение format_html - PullRequest
0 голосов
/ 03 марта 2020

У меня есть функция для возврата результата в html_format , но я не могу понять, как вернуть значение динамически c. В настоящее время это то, что у меня есть:

enter image description here

это функция:

class ImageColumn(tables.Column):
    def render(self, value):
        return format_html('<a href="/media/{}" download>Imagen</a>', value)

Как вы можно видеть, что у меня есть значение 'Image' , жестко запрограммированное, но мне нужно имя изображения, например, 'CFE.jpg' .

Я пробовал это:

return format_html('<a href="/media/{}" download>{}</a>', value) 

, но я получаю ошибку Index Tuple

, также я пробовал:

return format_html('<a href="/media/{}" download>{{object.id}}</a>', value)

, но только во внешнем интерфейсе показывает '{}'

Обновление

class ImageColumn(tables.Column):
    def render(self, value):
        try:
            path = value
            name = value.split("/")[-1].split("?")[0]
            if name:
                return format_html('<a href="/media/{0}" download>{0}</a>', path, name)
        except:
            ValidationError

enter image description here

Я добавил попытку, потому что был получение ошибки разделения ImageField.

1 Ответ

0 голосов
/ 03 марта 2020

Предполагая, что value - это имя файла, который вы можете просто сделать

class ImageColumn(tables.Column):
    def render(self, value):
        return format_html('<a href="/media/{0}" download>{0}</a>', value)

Если это полный путь, который вы можете использовать

class ImageColumn(tables.Column):
    def render(self, value):
        path = value
        name = value.split("/")[-1].split("?")[0]
        return format_html('<a href="/media/{}" download>{}</a>', path, name)

split("/")[-1] даст последняя часть пути (т. е. CFE.jpg)
split("?")[0] отбросит все параметры запроса, которые могут у вас быть.


Редактировать:
С Вы добавили value - это ImageFieldFile, вы можете использовать его name для разделения.

class ImageColumn(tables.Column):
    def render(self, value):
        path = value.name
        name = path.split("/")[-1].split("?")[0]
        return format_html('<a href="/media/{}" download>{}</a>', path, name)

Разделение - это метод для строк. Файл имеет такие атрибуты, как name, url, et c. который можно использовать.
Возможно, вам лучше использовать return format_html('<a href="{}" download>{}</a>', value.url, name) для URL. Это префикс settings.MEDIA_URL к имени файла / пути, как вы делаете. Преимущество заключается в том, что вы можете изменить URL-адрес для всех ваших медиафайлов, просто обновив настройки, а не переходя в каждое место и обновляя его.


Редактировать: По запросу я добавляю вывод, который я получил, когда попробовал это

 In [5]: type(value) 
 Out[5]: django.db.models.fields.files.ImageFieldFile 
 In [6]: value.name 
 Out[6]: 'private/logos/example_kfBWEZh.jpg'
 In [7]: value.name.split("/")[-1]
 Out[7]: 'example_kfBWEZh.jpg

Обратите внимание, что value - это ImageFieldFile, value.name - строка, по которой я могу вызвать .split().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...