上传图像域 Django

Upload imagefield Django

我需要帮助。 我想上传我的图片,但是有问题 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 %} 

图像的 url 看起来像: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()

在 url 年代,我尝试了很多不同的方法,但没有一个成功。 我应该在 STATIC_MEDIA 和 STATIC_URL 中放什么? 以及在 url 中放入什么才能工作?

ImageField

upload_to 需要作为 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/...。

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