上传imagefield Django

时间:2016-03-19 16:49:30

标签: django image django-urls media-url

我需要帮助。 我想上传我的图片,但问题是A screenshot of what I get 我动态上传了我的图片, 在我的模型中:

....
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 %} 

图片的网址如下:localhost:8000 / personne / static / 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()

在网址中,我尝试了很多不同的事情,但没有人工作。 我应该在STATIC_MEDIA和STATIC_URL中添加什么? 以及在网址上放什么工作?

2 个答案:

答案 0 :(得分:1)

<{1}} upload_to的{​​{1}}需要是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

然后图像将按照指定上传到MEDIA_ROOT / personne / static / ....

答案 1 :(得分:0)

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}))