Django ImageField upload_to path

Tengo problemas para entender y usar ImageField de Django.

Tengo un modelo:

class BlogContent(models.Model): title = models.CharField(max_length=300) image = models.ImageField(upload_to='static/static_dirs/images/') description = models.TextField() 

Mi sistema de archivos es actualmente:

 src |---main_project |---app_that_contains_blog_content_model |---static |---static_dirs |---images 

Cuando ejecuto el servidor y voy a la página de administración, puedo agregar objetos de BlogContent. Después de elegir una imagen para el campo de imagen, la imagen tiene un nombre temporal. Sin embargo, después de guardar este objeto, no puedo encontrar la imagen en la carpeta especificada por la ruta upload_to.

¿Cuál es la forma correcta de hacer esto?

Su imagen se cargaría a media carpeta de media , por lo que es mejor cambiar la ruta en el modelo como images/ , y se cargarán a los media/images

En settings.py agrega esto

MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

En url.py

 from django.conf.urls.static import static from django.conf import settings urlpatterns = [.... ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Y luego, si desea mostrar toda esta imagen, use algo como esto en view.py
BlogContent.objects.all()

Y hazlo así:

 {% for img in your_object %}  {% endfor %} 

static en upload_to tiene sentido, ya que las imágenes subidas por el usuario van a los media/ carpetas … necesita estos:

 image = models.ImageField(upload_to='blog/%Y/%m/%d') 

y todas las imágenes aterrizan en:

 media/blog/2016/01/02/img_name.jpg 

Se accede a ella en plantilla como esta:

  

en la configuración de:

 import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 

Deberías usar la ruta de los medios, en lugar de la estática. Ver docs