#python #django #django-templates
#python #django #django-шаблоны
Вопрос:
Я получаю сообщение об ошибке TypeError: expected str, bytes or os.PathLike object, not tuple
, много раз пробовал разные способы из Интернета, ничего не получалось. Кто-нибудь может помочь мне с этой проблемой.
Вот моя часть шаблона в settings.py файл :
from pathlib import Path
import os
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_DIRS = (os.path.join(BASE_DIR / 'templates'),
)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATE_DIRS,],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Ответ №1:
Похоже, проблема в этой строке
TEMPLATE_DIRS = (os.path.join(BASE_DIR / 'templates'),)
DIRS
ищет список, а не список кортежей, поэтому вместо этого вы можете использовать
'DIRS': [os.path.join(BASE_DIR, 'templates')],
Или, если вы хотите сохранить свой путь:
TEMPLATE_DIRS = [os.path.join(BASE_DIR / 'templates'),]
а затем установите DIRS
значение
'DIRS': TEMPLATE_DIRS,
Комментарии:
1. Затем я получаю ожидаемые str, байты или os. Объект, подобный пути, а не список
Ответ №2:
Установите каталог шаблонов в:
'DIRS': [BASE_DIR / 'templates'],
Если он не запускается, установите значение BASE_DIR/ "templates"
Ответ №3:
TEMPLATE_DIRS = (os.path.join(BASE_DIR / 'templates'),
Я думаю, что правильное утверждение для этого :
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),
а затем поместите это в TEMPLATES
список в качестве значения для DIRS
другой метод просто помещается (os.path.join(BASE_DIR, 'templates'),
в TEMPLATES
список
Ответ №4:
TEMPLATE_DIRS = (os.path.join(BASE_DIR / 'templates'),
в вашем примере выглядит неправильно — я полагаю, /
уже делает .join
. Поскольку BASE_DIR
это Path()
, я бы изменил эту строку на следующую:
TEMPLATE_DIRS = [BASE_DIR / 'templates']
Однако вы уверены, TEMPLATE_DIRS
что это (или, может быть, сейчас была) проблема, а не какой-то другой путь где-то в вашем SETTINGS
?
Я только что обновился до Django 4.1, и в моем случае изменение MEDIA_ROOT
решило проблему. Это был кортеж всего из 1 элемента, и, вероятно, он никогда не должен был быть кортежем с самого начала, но он работал без проблем в течение многих лет. Но теперь я внезапно получил именно эту ошибку.