Загрузить поле изображения Django
Мне нужна помощь, пожалуйста. Я хочу загрузить свои изображения, но есть проблема . Скриншот того, что я получаю, я загружал свои изображения динамически, в моей модели:
....
class Visage(models.Model):
personne = models.ForeignKey(Personne)
def generate_filename(self, filename):
return "personne/static/personne/Images/%s/%s"% (self.personne.nom,filename)
image = models.ImageField(blank=False, upload_to=generate_filename)
...
В шаблоне у меня есть:
{% for image in visages_liste %}
<a href="{{image.image.url }}"> <img src="{{image.image.url}}" height="420"></a>
{% endfor %}
URL-адрес изображения выглядит так: localhost:8000/personne/ статический /personne/Images/NameOfThePerson/NameOfTheImage.jpg
Вид:
class IndexView (generic.ListView):
template_name = 'personne/accueil.html'
context_object_name = 'visages_liste'
def get_queryset(self):
return Visage.objects.all()
В URL я пробовал так много разных вещей, но никто не работал. Что я должен поместить в STATIC_MEDIA и STATIC_URL? и что положить в URL для работы?
2 ответа
В settings.py
попробуйте настроить ваш MEDIA_ROOT
чтобы:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
И в вашем проекте urls.py
добавление файла:
from django.conf import settings
from django.conf.urls import patterns
# Add this to the end of the urls.py file, after your other urls
if settings.DEBUG:
urlpatterns += patterns('', (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}))
upload_to
из ImageField
должен быть корнем после settings.MEDIA_ROOT
,
Вместо
ImageField(blank=False, upload_to=os.path.join(MEDIA_ROOT, 'personee'))
пожалуйста, попробуй
ImageField(blank=False, upload_to='personne')
тогда изображение будет сохранено в MEDIA_ROOT/personne
,
РЕДАКТИРОВАТЬ: с вашей моделью настройки,
Вместо
def generate_filename(self, filename):
return os.path.abspath(os.path.join(MEDIA_ROOT, 'personne/static/personne/Images/'))+'/' + self.personne.nom+'/'+ filename
пожалуйста, попробуй
def generate_filename(self):
return 'personne/static/personne/Images/'+self.personne.nom
тогда изображение будет загружено в MEDIA_ROOT/personne/static/... как указано.