【问题标题】:django - why is this not working?django - 为什么这不起作用?
【发布时间】:2023-03-20 01:25:02
【问题描述】:

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

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 错误,因为路径不存在。我的错误是什么?

【问题讨论】:

  • 服务器是否对媒体目录有写权限?
  • 用户目录是否存在?它的权限是什么?您在上传文件时是否收到错误或异常?
  • @MattWritesCode,我在本地开发。
  • @niconoe,不,在上传文件期间,一切都很好 - 没有错误消息,但是一旦我渲染它,我看不到图像并且我调试它,我看到 404
  • 我有个问题,你为什么在这里使用escape {{MEDIA_URL|escapejs}}

标签: python django media media-url


【解决方案1】:

转义

转义字符以用于 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():

【讨论】:

    【解决方案2】:

    尝试在 upload_to 参数的开头添加斜线:

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

    【讨论】:

    • 那没用,它会引用根目录
    • 看看这个,也许它可以帮助:http://agopian.info/blog/django-filefield-et-imagefield-upload_to-et-shell-python.html
    猜你喜欢
    • 2011-06-15
    • 1970-01-01
    • 2017-01-13
    • 2012-11-17
    • 2016-12-07
    • 2023-03-16
    • 2011-10-13
    相关资源
    最近更新 更多