将图像保存到Django,正确的方法?

时间:2012-06-04 16:49:00

标签: python django

在django 1.4中设置上传路径的最佳做法是什么? 我有这样的模型

def upload_image(instance, filename):

    return os.path.join(instance.slug, filename)

class Book(models.Model):
    ...
    ...

    image = models.ImageField(upload_to=upload_image) 

    def admin_image(self):
        return "<img src='%s' />" % self.image

    ....

使用settings.py

PROJECT_DIR = os.path.dirname(os.path.realpath(__file__))
ROOT_DIR = PROJECT_DIR.rsplit(os.sep, 1)[0]

MEDIA_ROOT = os.path.join(ROOT_DIR, 'books', 'static', 'books')
MEDIA_URL = '/media/'

STATIC_ROOT = ''
STATIC_URL = '/static/'

和admin.py这样

class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'admin_image')

所以,最后,我将图像正确保存到/root-of-project/books/static/books/programming-java/wall.jpg中, 但是,数据库中保存的路径是“programming-java / wall.jpg”,我必须在每次显示图像时连接前缀'/ static / books /'

1 个答案:

答案 0 :(得分:1)

为什么要在模板中对这些行进行连接/硬编码?您可以为此目的使用静态标记

{% load staticfiles %}
<img src="{% static "images/hi.jpg" %}" />

别名

{% load staticfiles %}
<img src="{% static object.image.url %}" />

如果你真的必须,你可以为你的模型添加一个方法吗?