【问题标题】:Django: Can't access static files in python scriptDjango:无法访问python脚本中的静态文件
【发布时间】:2021-04-19 07:23:17
【问题描述】:

在 apache 服务器上部署了一个带有 mod wsgi 的 django 项目。到目前为止一切正常。 在一个 python 脚本中,我想在静态文件中打开一个文件

因此我尝试了这样的事情:

mycode.py

import cv2


    class Foo():
      def __init__(self):
        ...

      def openImg(self):
        self.myimg = cv2.imread('static/myapp/img/picture.jpg',0)
        return self.myimg

.. 只是为了测试

但是它找不到这个文件。 

无论是在路径中('static/myapp/img/picture.jpg'),还是在路径中('myapp/static/myapp/img/picture.jpg')还是在路径中('../static/myapp/img /picture.jpg') 和其他一些我已经忘记了。

它总是返回“无”。

如果我在“未部署”的本地项目上尝试相同的操作,它可以正常工作。

我已经将所有静态文件收集到 /myproject/static 并授予足够的权限来访问它们。

顺便说一句,对 html 中的静态文件的访问在生产环境中工作。

有什么问题? 你能给我什么建议吗?

谢谢。


一些附加信息:

views.py

from django.shortcuts import render
from .mycode import Foo

def index(request):

   # New Instance for class Foo
   bar = Foo()

   # Return img array to put it in html for whatever 
   imagearray = bar.openImg()

   context = {'imgarray': imgarray}
   return render(request, 'myapp/index.html', context)

这是我的目录的一个例子

/home/myuser/MyProject
  /static/myapp/img/picture.jpg (collected)
  /
  /myapp
    /static/myapp/img/picture.jpg
    /mycode.py
    /views.py
  /MyProject
    /settings.py

  

在我的 apache 配置文件中:

Alias /static /home/myuser/MyProject/static
<Directory /home/myuser/MyProject/static>
    Require all granted
</Directory>

Alias /media /home/myuser/MyProject/media 
<Directory /home/myuser/MyProject/media>
    Require all granted
</Directory>

<Directory /home/myuser/MyProject/MyProject>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>


WSGIScriptAlias / /home/myuser/MyProject/MyProject/wsgi.py
WSGIDaemonProcess django_app python-path=/home/myuser/MyProject python-home=/home/myuser/MyProject/venv
WSGIProcessGroup django_app

【问题讨论】:

    标签: python django apache static mod-wsgi


    【解决方案1】:

    在 mycode.py 你可能想试试:

    from django.contrib.staticfiles.storage import staticfiles_storage
    import cv2
    
    
        class Foo():
          def __init__(self):
            ...
    
          def openImg(self):
            path = staticfiles_storage.path('myapp/img/picture.jpg')
            self.myimg = cv2.imread(path,0)
            return self.myimg
     
    

    【讨论】:

      【解决方案2】:

      这发生在我身上,直到我跑了

      python manage.py collectstatic
      

      你能试试这个吗?

      【讨论】:

      • 我已经运行过了。所有文件都收集在 MyProject/static...
      猜你喜欢
      • 2013-10-01
      • 2020-11-26
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 2017-12-23
      • 1970-01-01
      相关资源
      最近更新 更多