【问题标题】:Access files in production-mode of django project在 django 项目的生产模式下访问文件
【发布时间】:2019-11-26 14:06:15
【问题描述】:

对于我的 Django 项目,我必须打开一个永久位于服务器上的 xsl 文件,以便对用户可以上传的其他文件执行一些操作。在开发模式下,我只是在 python 脚本中使用了一个相对路径来指向该 xsl 文件,它工作正常:

xslFile = open('./transform.xsl')

但是,由于我现在正处于将项目部署到服务器的阶段,我无法更改那行代码,以便在生产模式下仍然可以找到该文件。 我已经尝试过设置绝对路径,例如

xslFile = open('/srv/www/htdocs/djangoProject/mysite/transform.xsl')

这引发了错误。此外,我尝试将文件移动到我在 settings.py 中声明的静态目录:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

然后尝试像这样打开文件:

from django.conf import settings
xslFile = open(os.path.join(settings.STATIC_ROOT, 'transform.xsl'))

但是,这两种尝试都会产生此类错误消息:

FileNotFoundError at /mysite/add/

[Errno 2] 没有这样的文件或目录:'transform.xsl'

请求方法:POST 请求

网址:xx.xx.xx.xxx/mysite/add/ Django 版本:2.2.7 异常

类型:FileNotFoundError 异常值:[Errno 2] 没有这样的文件或 目录:“transform.xsl”异常

位置:/srv/www/htdocs/djangoProject/mysite/createDatabase.py 在 handleInputFiles,第 84 行 Python 可执行文件:/usr/bin/python3 Python 版本:3.6.5

使用 wsgi.py 接口通过 Apache2 安装访问 django 应用程序。

访问 xsl 文件的正确方法是什么?

【问题讨论】:

  • 也许你有错字你的文件是 xls,而不是 xsl
  • 危险 - 此处的友好警告:我不知道该文件中的内容,但请记住(一般而言)/static 中的所有内容都被假定为安全地向公众展示。换句话说,如果我去 http://diamon.com/static/transform.xsl 你可以看到那个文件吗?将文件放在您的 /static/ 中,以便您的 Web 进程可以找到它们是一种误解,并且不是正确的方法。

标签: python django


【解决方案1】:

您确定您的文件以 *.xsl 结尾吗? 可能是错字.xls

settings.py 你有默认的基本目录。这是您项目的基础。 如果将 xls 放在 media/myxls.xls 中

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

在你的views.py

from myproject.settings import BASE_DIR
import os

with open(os.path.join(BASE_DIR,'media/myxls.xls') as file:
    print(myfile.read())

如果用这种方式访问​​文件,就不需要使用绝对路径,而且很灵活。

当你将文件放入静态文件夹时,你是否运行了./manage.py collectstatic

【讨论】:

  • 你是对的!我似乎在某处产生了一些错字。在再次疯狂提示所有解决方案之后,它现在可以通过手动将文件放入静态目录并在 python 脚本中创建链接,如我的问题中所述(来自 django.conf import settings xslFile = open(os.path.join(settings. STATIC_ROOT,'transform.xsl')))。非常抱歉在这个问题上浪费时间,但是您的回答让我注意到了我的错字,非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2018-04-21
  • 1970-01-01
  • 2017-12-23
  • 2015-04-05
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多