Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django正在生产中,可以存储媒体文件,但找不到_Django_Image_Media_Pythonanywhere - Fatal编程技术网

Django正在生产中,可以存储媒体文件,但找不到

Django正在生产中,可以存储媒体文件,但找不到,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 =

我刚刚把我的项目投入生产。我有一个功能,用户可以上传自己的个人资料图片。人们可以上传他们的图片,甚至可以将其存储在正确的目录中。然而,当我试图实现它时,我得到一个404未找到错误。我正在使用Pythonywhere,所有图片都存储在路径:

主页/[用户名]/[项目名称]/媒体/个人资料\u图片

以下是相关的代码片段:

设置.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)
    ...
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文件中。是的,我已经添加了它。