Django IOError 13 - 尝试写入静态文件时权限被拒绝

时间:2016-09-09 14:16:57

标签: python django

我花了很长时间试图让Django打开并将内容写入远程文件。这篇文章可以被视为同一主题previously asked question的第二部分。但是,这次我设法让Django看到文件,并且错误从'IOError - 这样的文件或目录不存在'变为 IOError at /my_view/[Errno 13] Permission denied: '/var/www/test/djprj/djprj/static/media/my_target_file.xml

视图(位于\\10.8.0.1\share\djprj\djprj\djprj\egais):

def my_view (request)
   #...
   with open(os.path.join(settings.MEDIA_ROOT, 'my_target_file.xml'), 'w') as f:
        f.write(html_content.encode('utf8'))
        f.close;

settings.py(仅限相关部分)

import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
    ...

ROOT_URLCONF = 'supermarket_project.urls'

WSGI_APPLICATION = 'supermarket_project.wsgi.application'
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

STATIC_URL = '/static/'

if DEBUG:
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static","static-only")
#STATIC_ROOT = [os.path.join(BASE_DIR,"static-only")]
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static","media")
#MEDIA_ROOT = [os.path.join(BASE_DIR,"media")]
    STATICFILES_DIRS = (
                      os.path.join(os.path.dirname(BASE_DIR),"static","static"),
     )

以前,我的文件位于静态文件夹或应用程序本身的文件夹中,由于某种原因,Django无法找到文件和/或文件夹。将其移至Media后,错误从“no such file or folder”更改为“permission denied”。

最重要! 当我复制整个项目并在本地运行它(目标文件仍然是远程文件)时,所有工作对我来说都很好! 有人能提出一种方法来解决这个问题吗? 即使是对应该做什么的暗示也将受到赞赏。我甚至不知道原因是在Appache设置中还是有关于Django本身的东西。

更新 即使是完整路径的空间化也无法解决问题。而且,如果我这样做,Django甚至都看不到该文件。

0 个答案:

没有答案