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"
4 ответов:
поскольку это лучший результат в 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/'
ответ dyve хорош, однако, если вы используете "кэшированное хранилище" в своем проекте django, а конечные url-пути статических файлов должны получить " хэш " (например,стиль.aaddd9d8d8d7.css С стиль.css), то вы не можете получить точный url с
django.templatetags.static.static(). Вместо этого, вы должны использовать тег шаблона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')
вот еще один способ! (проверено на Django 1.6)
from django.contrib.staticfiles.storage import staticfiles_storage staticfiles_storage.url(path)
ответ @ 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)
Comments