我花了很长时间试图让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甚至都看不到该文件。