Ошибка Django в файле настроек Django - Ошибка типа: ожидаемый объект str, bytes или os.PathLike, не кортеж - PullRequest
1 голос
/ 18 мая 2019

Я использую Django для проекта.

Я получаю эту ошибку -> TypeError: ожидаемый объект str, bytes или os.PathLike, а не кортеж.

Это указывает на строку 17 в моем файле setting.py. Код в строке 17, как показано ниже.

14: import os
15: # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
16: BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
17: TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')

Есть предложения?

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Если вы попытаетесь запустить это в реплее, вы увидите, что:

>>> BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.getcwd()))),
>>> BASE_DIR
('c:\\srv',)
>>> isinstance(BASE_DIR, tuple)
True
>>> os.path.join(BASE_DIR, 'templates')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\ntpath.py", line 84, in join
    result_path = result_path + '\\'
TypeError: can only concatenate tuple (not "str") to tuple
>>>

проблема в , в конце

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.getcwd()))),  
                                                                         ^
                                                                         | this one

, это работает, еслиВы удаляете его:

>>> BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.getcwd())))
>>> os.path.join(BASE_DIR, 'templates')
'c:\\srv\\templates'

в Python для создания кортежей используется запятая (хотя многие считают, что это скобки):

>>> 1,2,3
(1, 2, 3)

кортеж из двух элементов:

>>> 1,2
(1, 2)

и кортеж из одного элемента:

>>> 1,
(1,)
0 голосов
/ 18 мая 2019

TEMPLATE_DIR - это список.Измените эту строку на

TEMPLATE_DIR = [os.path.join(BASE_DIR, 'templates')]

TEMPLATES = [
    {
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': TEMPLATE_DIR, 
     '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', 
         ], 
         }, 
     }, 
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...