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

Django получает URL статических файлов

Я использую reportlab pdfgen для создания PDF. В PDF есть изображение, созданное drawImage. Для этого мне нужен либо URL-адрес изображения, либо путь к изображению в представлении. Мне удалось создать URL-адрес, но как бы получить локальный путь к изображению?

Как получить URL-адрес:

prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"
4b9b3361

Ответ 1

Поскольку это главный результат в Google, я думал, что добавлю еще один способ сделать это. Лично я предпочитаю это, так как он оставляет реализацию в рамках Django.

# Original answer said:
# from django.templatetags.static import static
# Improved answer (thanks @Kenial, see below)
from django.contrib.staticfiles.templatetags.staticfiles import static

url = static('x.jpg')
# url now contains '/static/x.jpg', assuming a static path of '/static/'

Ответ 2

dyve ответ хороший, однако, если вы используете "кэшированное хранилище" в своем проекте django, а конечные URL-адреса статических файлов должны получать "хэшированные" (например, style.aaddd9d8d8d7.css из style.css), то вы не можете получить точный url с django.templatetags.static.static(). Вместо этого вы должны использовать тег template из django.contrib.staticfiles, чтобы получить хешированный url.

Кроме того, в случае использования сервера разработки этот метод тэга шаблона возвращает не-хэшированный URL-адрес, поэтому вы можете использовать этот код независимо от того, что хост - это разработка или производство!:)

from django.contrib.staticfiles.templatetags.staticfiles import static

# 'css/style.css' file should exist in static path. otherwise, error will occur 
url = static('css/style.css')

Ответ 3

здесь другой путь! (проверено на Django 1.6)

from django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)

Ответ 4

Ответ @dyve не работал для меня на сервере разработки. Вместо этого я решил это с помощью find. Вот функция:

from django.conf import settings
from django.contrib.staticfiles.finders import find
from django.templatetags.static import static

def get_static(path):
    if settings.DEBUG:
        return find(path)
    else:
        return static(path)

Ответ 5

Если вы хотите получить абсолютный URL (включая протокол, хост и порт), вы можете использовать функцию request.build_absolute_uri как показано ниже:

from django.contrib.staticfiles.storage import staticfiles_storage
self.request.build_absolute_uri(staticfiles_storage.url('my-static-image.png'))
# 'http://localhost:8000/static/my-static-image.png'

Ответ 6

Используйте static тег по умолчанию:

from django.templatetags.static import static
static('favicon.ico')

В django.contrib.staticfiles.templatetags.staticfiles есть еще один тег (как в принятом ответе), но в Django 2 он устарел. 0+.