django - 为什么这不起作用?

时间:2013-04-11 08:35:47

标签: python django media media-url

我的模型中有这个图像字段

foto = models.ImageField(upload_to="user/%Y/%m/%d",default='')

并在我的设置中:

MEDIA_ROOT = os.path.join(PROJECT_PATH, "media")
MEDIA_URL = "/media/"

并在我的模板中:

<img class="profilfoto" src="{{MEDIA_URL|escapejs}}{{user.foto.name}}" />

其他带upload_to='.'的图片正在保存到媒体文件夹中,但user文件夹未创建,为什么会这样?

我运行了syncdb和schemamigration,一切正常但加载此图片时出现404错误,因为路径不在那里。什么可能是我的错?

2 个答案:

答案 0 :(得分:1)

escapejs

转义用于JavaScript字符串的字符。这不会使字符串在HTML中使用安全,但在使用模板生成JavaScript / JSON时确实可以防止语法错误。

<img class="profilfoto" src="{{MEDIA_URL|escapejs}}{{user.foto.name}}" />

您的上述代码会导致,例如:user/2013\u002D04\u002D10_170411/image.png,在加载此图片时会出现404错误。

<强>更新

保存或更新图像时,必须在表单中定义enctype。这将允许您保存图像或文件:

<form id="registerform" action="/angemeldet/" method="post" 
    enctype="multipart/form-data">
    {% csrf_token %}

form = YourForm(request.POST, request.FILES)
    if form.is_valid():

答案 1 :(得分:-1)

尝试在upload_to中向参数的开头添加斜杠:

foto = models.ImageField(upload_to="/user/%Y/%m/%d",default='')