python-3.x Django:这个后端不支持绝对路径

tct7dpnv  于 2023-10-21  发布在  Python
关注(0)|答案(4)|浏览(117)

我正在尝试为一些必须用python open()方法打开的json文件设置路径。阅读文档时,我注意到www.example.com中的Storage类的path方法django.core.files.storage必须被重写,但我不知道如何重写它,因为我不知道如何存储此路径。
我的文件在这边

App
--index_backend
----json
-------some_json.json
----index.py
--views.py
manage.py

我是Django的新手,所以如果你需要更多的代码,请告诉我尽可能多地上传。
更新我想实现的是当点击按钮时调用一个函数,这个按钮向http://127.0.0.1:8000/App/getValues发送一个请求,以便运行一个python函数,该函数调用www.example.com中的另一个python函数。在index.py中,some_json.json被打开,但当运行getValues时,它在/App/getValues/处引发FileNotFoundError,因为它在/App/getValues/而不是/App/index_backend/json/中查找some_json.json。index.py

biswetbf

biswetbf1#

在index.py文件中:

import json
import os

this_file = os.path.realpath(__file__)
this_folder = os.path.dirname(this_file)
path_to_json = os.path.join(this_folder, 'json', 'some_json.json')

with open(path_to_json) as f:
    data = json.load(f)

print(data)
uklbhaso

uklbhaso2#

如果你使用Django 3.1+,这里有一个方法可以在索引中使用

from django.conf import settings

BASE_DIR = settings.BASE_DIR

JSON_FILE = BASE_DIR / 'App/index_backend/json/some_json.json'
dw1jzc5e

dw1jzc5e3#

以上都不起作用,经过大量的搜索,这对我来说是有效的。
首先,添加了MEDIA ROOT,因为我需要这些JSON文件是动态的

MEDIA_ROOT  = os.path.join(BASE_DIR, 'App/media')
MEDIA_URL = '/media/'

然后,在index_backend/index.py上导入default_storage

from django.core.files.storage import default_storage
with default_storage.open('some_json.json', "r") as some_json_file:
      doSomethingJSONGLYCool(some_json_file)

将媒体文件夹设置为

App
--index_backend
----index.py
--media
---path/to/json
--views.py
manage.py
cig3rfwq

cig3rfwq4#

对于那些使用存储桶的用户- AWS或类似的用户如果您使用的是介质-请使用以下内容构建文件路径:
从django.core.files.storage导入get_storage_class
//这里需要双大括号
media_storage = get_storage_class()()
file_path = media_storage.url(name=fileobj.file.name)

相关问题