如何打开django项目之外的文件?

yhxst69z  于 2023-08-08  发布在  Go
关注(0)|答案(2)|浏览(92)

我正在构建一个django视图,它返回给定HTTP请求中传递的经度和纬度的城镇名称。为了执行这些计算,我编写了一个函数,它需要打开一个位于django项目外部的Geojson文件。此函数与视图在同一个文件中:

/home/erwan/Images/eosya_app/backend/api/municipality/compute_municipality_view.py

字符串
在这个函数中,我执行了以下打开操作,但是django没有找到文件。

with open('../../../database/unparsed_data/administrative_boundaries/my_file.geojson','r') as f:


我做了一些研究,了解到我必须在设置中定义一个基本目录路径,才能访问外部文件。我在我的www.example.com上添加了以下行setting.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
FILES_DIR = os.path.abspath(os.path.join(BASE_DIR, '../database/unparsed_data'))


我在函数中相应地更新了文件路径:

file_path = os.path.join(settings.FILES_DIR, '/administrative_boundaries/france-geojson-master/departements.geojson')


但是django仍然无法找到文件。此外,打印与预期路径不匹配。看起来好像没有考虑FILE_DIR。下面是打印的结果:

/administrative_boundaries/france-geojson-master/departements.geojson


我还尝试验证我的项目根路径,但没有成功:

print(settings.SITE_ROOT)
AttributeError: 'Settings' object has no attribute 'SITE_ROOT'


我做错了什么,如何在这个函数中访问我的geojson文件?

pgky5nke

pgky5nke1#

/home/erwan/Images/eosya_app/backend/api/municipality/compute_municipality_view.py中:

CURDIR = os.path.dirname(__file__)
FILES_DIR = os.path.join(CURDIR, '../../../database/unparsed_data/administrative_boundaries/')

...
with open(os.path.join(FILES_DIR, 'france-geojson-master/departements.geojson')) as fp:
    ...

字符串

q35jwt9p

q35jwt9p2#

在您的settings.py中,您应该使用以下行来定义BASE_DIR:

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

字符串
假设你的Django项目结构是这样的:

/home/erwan/Images/eosya_app/
  ├── backend/
  │   ├── api/
  │   │   └── municipality/
  │   │       ├── compute_municipality_view.py
  │   │       └── ... (other files and folders)
  │   └── ... (other files and folders)
  ├── database/
  │   └── unparsed_data/
  │       └── administrative_boundaries/
  │           └── my_file.geojson
  └── eosya_app/
      ├── settings.py
      └── ... (other files and folders)


在compute_municipality_view.py中,您可以像这样访问Geojson文件:

import os
from django.conf import settings

file_path = os.path.join(settings.BASE_DIR, 'database/unparsed_data/administrative_boundaries/my_file.geojson')

with open(file_path, 'r') as f:
    # Your file processing code here


通过使用settings.BASE_DIR,您可以获得Django项目的基目录路径,然后您可以构造相对于基目录的Geojson文件的路径。

相关问题