Загрузить поле изображения 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/... как указано.

Другие вопросы по тегам