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"
599   4  

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

    Ничего не найдено.