2017-02-06 11 views
0

Я хотел бы иметь ImageField в форме администратора для моей модели (скажем, для профиля пользователя). И я хотел бы отобразить это изображение позже.Django - ImageField, загружать, хранить и показывать изображение в сервере разработки

Это модель у меня есть:

class Individual(models.Model): 
    ind_name = models.CharField(max_length=100) 
    ind_photo = models.ImageField(default="default.jpg") 

    def __str__(self): 
     return self.ind_name 

Это то, что я имею в настройках моего сайта:

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, "static") 
MEDIA_URL = '/static/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR,"static/media") 

Они являются URLs моего приложения:

urlpatterns = [ 
    url(r'^$', views.index, name="index") 
] 

Я знаю, как использовать статические файлы (например, CSS, Javascript) и заставить их работать как в разработке, так и в производстве. Но я понятия не имею, как заставить изображения работать. Я читал Managing static files и Deploying static files, но я до сих пор не понимаю.

С кодом выше изображение сохраняется в соответствующей папке (то есть/статическом/носителе на уровне моего сайта). Но я понятия не имею,:

1), как отобразить его в шаблоне,

2) будет ли лучше сохранить эти изображения в статической папке моего приложения,

3) и (если 2) должен ли я запускать collectstatic каждый раз, когда кто-то загружает изображение в админ.

Извините, если я не понимаю, но этот путь более темный, чем я думал.

ответ

0

для того, чтобы изображение, которое будет загружено и служил во время развития, я должен был переместить папку медиа из статической папки (т.е. создать папку средств массовой информации в root из папки моего проекта).

И в моей основной urls.py, я должен был добавить:

from django.conf import settings 
from django.conf.urls.static import static 

if settings.DEBUG: 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

как предложено MicroPyramid.

Чтобы отобразить его в качестве шаблона для данного индивидуального «кто-то» (из QuerySet), я использую:

<img src="{{ somebody.ind_photo.url }}"> 
0

Рекомендуется использовать как статические файлы, так и медиафайлы. Да, вы должны делать collectstatic все время, когда вы загружаете, если вы храните изображения в статической папке. Мы можем получить полный URL-адрес изображения с объекта, как показано ниже.

{{obj.ind_photo.url}} 

Для получения дополнительной информации о файлах https://docs.djangoproject.com/en/1.10/topics/files/

+0

Я не могу воспроизвести изображение с этим на сервере разработки. URL-адрес - правильный путь, но он не обслуживается. Кроме того, если мне нужно запускать collectstatic каждый раз, когда изображение загружается в admin, где я должен это перехватить? В методе сохранения для моей модели? – GuitarExtended

+0

В общем случае в среде разработки/производства мы будем обслуживать статические или мультимедийные файлы с веб-сервером. Поэтому вам нужно настроить путь к вашему медиа-каталогу на своем веб-сервере. – MicroPyramid

+0

Я думаю, что могу заставить его работать на производстве, но мне нужно тестировать материал во время разработки. Итак, как я могу служить образ при запуске сервера разработки? – GuitarExtended