Django正在生产中,可以存储媒体文件,但找不到
我刚刚把我的项目投入生产。我有一个功能,用户可以上传自己的个人资料图片。人们可以上传他们的图片,甚至可以将其存储在正确的目录中。然而,当我试图实现它时,我得到一个404未找到错误。我正在使用Pythonywhere,所有图片都存储在路径: 主页/[用户名]/[项目名称]/媒体/个人资料\u图片 以下是相关的代码片段: 设置.pyDjango正在生产中,可以存储媒体文件,但找不到,django,image,media,pythonanywhere,Django,Image,Media,Pythonanywhere,我刚刚把我的项目投入生产。我有一个功能,用户可以上传自己的个人资料图片。人们可以上传他们的图片,甚至可以将其存储在正确的目录中。然而,当我试图实现它时,我得到一个404未找到错误。我正在使用Pythonywhere,所有图片都存储在路径: 主页/[用户名]/[项目名称]/媒体/个人资料\u图片 以下是相关的代码片段: 设置.py STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') MEDIA_URL =
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
class Person(models.model):
...
profile_picture = models.ImageField(upload_to="profile_picture", blank=True, null=True)
...
url.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
class Person(models.model):
...
profile_picture = models.ImageField(upload_to="profile_picture", blank=True, null=True)
...
型号.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
class Person(models.model):
...
profile_picture = models.ImageField(upload_to="profile_picture", blank=True, null=True)
...
profile\u 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\u picture/[图像文件的名称].jpg
更新:
我怀疑错误在于文件的服务,而不是我引用它的路径。我怀疑,因为我也得到了404找不到的时候
我显式地尝试访问媒体领域()的url
同时我能够访问相应的静态文件。()
尽管如此,这是python manage.py collectstatic的结果,只需从
{{profile.profile_picture.url}
到
{{profile.profile_picture.path}
尝试此操作,将{MEDIA_URL}}添加到src:
<img src="{{ MEDIA_URL }}{{ profile.profile_picture.url }}">
您将文件存储在pythonywhere实例的文件系统中。我没有在任何地方使用pythonanywhere,但是那里的文件可能不是持久的。您需要将媒体文件存储在像S3这样的持久性存储器中。我强烈建议你用它来处理这件事。安装需要一些时间,但它会解决您的问题。您需要将URL和目录路径添加到媒体文件中。在关于pythonywhere的Webapp部分
我能看出你的情况。您的媒体根目录是:
MEDIA\u ROOT=os.path.join(os.path.dirname(BASE\u DIR),“MEDIA”)
因此,在目录中您必须放置/home/username/media
,而不是
/home/username/media\u cdn
这就是我解决这个问题的方法,我希望它能有所帮助。您使用的是什么版本的django?我使用的是django 2.07,而不是.path或.url,请尝试不使用任何不起作用的{profile.profile_picture}。它产生了:/profile\u picture/[name\u of\u image\u file].jpg,这也是一个404。请添加呈现profile\u page.html的视图,以获取有关在profile中呈现的内容的详细信息。转到管理仪表板,尝试在那里添加图片,并注意更改。只需单击图片路径,即可准确查看图片的真实路径。(在管理仪表板中执行所有操作)并让我们知道您是否在生产中使用nginx?在管理仪表板上添加图像会产生相同的负面结果。是的,使用了nginx。这不起作用。但是,我注意到上下文变量{MEDIA_URL}}没有设置为任何值。这可能是问题的一部分吗?@Alien13是的,我想是的:
MEDIA\u URL='/MEDIA/'
,或者媒体的相对路径,它与您配置的/static/path相同。我的意思是,在您的settings.py文件中。是的,我已经添加了它。