Функция Django static() для получения статического файла не дает такого файла - ошибка
Я делаю проект на Django со следующей структурой:
/project
/cv
/static
/configuration
configuration.json
Итак, проект с одним приложением в нем и файлом config.json в папке static.
Мой settings.py (самые важные настройки для этого):
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"cv",
]
STATIC_URL = "/static/"
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(BASE_DIR, "cv/static")
В моем представлении я использую функцию static() для получения статического файла
def index(request):
file_path = static("configuration/configuration.json")
with open(file_path) as f:
configuration = json.loads(f.read())
return render(request, "index.html", configuration)
Но он продолжает выдавать мне ошибку:
Нет такого файла или каталога: '/static/configuration/configuration.json'
Я могу исправить это, явно разбирая строку пути для функции index:
def index(request):
file_path = "./cv/static/configuration/configuration.json"
with open(file_path) as f:
configuration = json.loads(f.read())
return render(request, "index.html", configuration)
Но как это сделать с помощью функции static()? Функция static() использует переменную static_url, но как бы я ее не настраивал, она продолжает выдавать мне подобную ошибку.
Есть идеи, что я делаю неправильно?
Функция static()
вернет URL, по которому можно получить доступ к файлу, вам это не нужно, вам нужно получить путь к файлу в файловой системе.
Соедините settings.STATIC_ROOT
и файл, чтобы получить путь к файлу в файловой системе
def index(request):
file_path = os.path.join(settings.STATIC_ROOT, "configuration/configuration.json")
with open(file_path) as f:
configuration = json.loads(f.read())
return render(request, "index.html", configuration)