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
Python django文件上载:[Errno 13]权限被拒绝:'/静态';_Python_Django_Apache_Mod Wsgi_Permission Denied - Fatal编程技术网

Python django文件上载:[Errno 13]权限被拒绝:'/静态';

Python django文件上载:[Errno 13]权限被拒绝:'/静态';,python,django,apache,mod-wsgi,permission-denied,Python,Django,Apache,Mod Wsgi,Permission Denied,我正在尝试用django上传几个文件。在我使用djangos内置服务器的本地机器上,一切正常,但在我的生产力服务器上,我遇到以下错误: [Errno 13] Permission denied: '/static' 关于这个问题有很多问题,但我发现没有什么对我有用。 在我的情况下,它与文件权限无关。我发现问题在于django希望将文件保存在文件系统的根文件夹中,而不是网站的根文件夹中。如果我在“/static”中创建文件夹,文件将在那里创建,但例如图像不会显示在网页上,因为django希望它们

我正在尝试用django上传几个文件。在我使用djangos内置服务器的本地机器上,一切正常,但在我的生产力服务器上,我遇到以下错误:

[Errno 13] Permission denied: '/static'
关于这个问题有很多问题,但我发现没有什么对我有用。 在我的情况下,它与文件权限无关。我发现问题在于django希望将文件保存在文件系统的根文件夹中,而不是网站的根文件夹中。如果我在“/static”中创建文件夹,文件将在那里创建,但例如图像不会显示在网页上,因为django希望它们位于“/var/www/webpage root/static/…”中

我使用模型来存储文件:

class Document(models.Model):
    title = models.CharField(max_length=100, blank=True, null=False)
    document = models.FileField(upload_to='static/bachelor/documents/', max_length=500, blank=True, null=True)
并以这种方式保存它们:

if form.is_valid():
    data = request.FILES['document']
    doc = Document(document=data)
    doc.save()
如上所述:

我使用Apache和mod_wsgi。apache文件如下所示:

<VirtualHost *:80>
    ServerAdmin user@webpage.de
    ServerName webpage.de
    ServerAlias www.webpage.de
    DocumentRoot /var/www/webpage

    Alias /media /var/www/webpage/webpage/
    Alias /static /var/www/webpage/static/

    <Directory /var/www/webpage>
        Order allow,deny
        Allow from all
    </Directory>

    WSGIScriptAlias / /var/www/webpage/apache/webpage.wsgi
    <Directory /var/www/webpage>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/webpage-error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/webpage-access.log combined
</VirtualHost>
我必须在STATICFILES\u DIRS中设置两个不同的路径,因为我在服务器上提供静态文件时遇到了问题。通过这两行代码,我可以在开发机器和运行apache的公共服务器的两端提供静态文件

我的配置中是否遗漏了什么,或者是否有什么问题?我不知道为什么apache希望在/static而不是/var/www/website/static中上传文件,但我认为这可能是因为我的apache配置有问题

有谁能帮我一个忙吗


非常感谢您对上传媒体的Apache配置:

Alias /media /var/www/webpage/webpage/
与Django设置不同步:

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/var/www/example.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://example.com/media/", "http://media.example.com/"
MEDIA_URL = ''

根据您的Apache配置,您应该拥有
MEDIA\u ROOT='/var/www/webpage/webpage/'
MEDIA\u URL='/MEDIA/'
您需要更改静态文件夹的所有权。对于root用户,请尝试“sudo chown-R yourusername:yourgroupname/projectfolder/static”。

与我的错误相同

  python manage.py collectstatic
在这种情况下,静态url和静态根目录具有相同的路径“”

选择不同的目录,如果出现此错误,请重试

这解决了我的问题

  python manage.py collectstatic