[英]Django in production, can store media file but cannot find it
我刚刚将我的项目投入生产。 我有一个功能,用户可以上传自己的个人资料图片。 人们可以上传他们的照片,甚至将其存储在正确的目录中。 但是, 当我尝试实现它时,出现404 not found错误 。 我正在使用Pythonanywhere,所有图片都存储在路径中:
家用/ [用户名] / [PROJECT_NAME] /媒体/ profile_picture
以下是相关的代码段:
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urls.py
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
models.py
class Person(models.model):
...
profile_picture = models.ImageField(upload_to="profile_picture", blank=True, null=True)
...
profile_page.html
...
<div class="photo-container">
{% if profile.profile_picture %}
<img src="{{ profile.profile_picture.url }}">
{% else %}
<img src="{% static 'external_page/assets/img/placeholder.png' %}">
{% endif %}
</div>
...
当我隔离标签时:
{{ profile.profile_picture.url }}
我得到:
/media/profile_picture/[name_of_image_file].jpg
更新:
我怀疑错误在于文件的提供而不是我引用其路径。 我怀疑因为我还得到了404找不到
我明确尝试访问媒体文件的网址( https://www.website.com/media/profile_picture/[name_of_image_file.jpg] ),
同时我可以访问相应的静态文件。 ( https://www.website.com/media/assets/[some_asset] )
虽然,这是python manage.py collectstatic的结果
只需从
{{profile.profile_picture.url}}
至
{{profile.profile_picture.path}}
尝试执行以下操作,将{{MEDIA_URL}}添加到src中:
<img src="{{ MEDIA_URL }}{{ profile.profile_picture.url }}">
您正在将文件存储在pythonanywhere实例的文件系统中。 我没有在任何地方使用python,但可能其中的文件不是持久性的。 您需要将媒体文件存储在S3之类的持久性存储中。 我强烈建议您使用django-storages为您处理此问题。 设置会花费一些时间,但可以解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.