Django设置文件中的Django错误-TypeError:预期的str,字节或os.PathLike对象,而不是元组

时间:2019-05-18 15:25:33

标签: python django

我正在将Django用于项目。

我收到此错误-> TypeError:预期的str,字节或os.PathLike对象,而不是元组。

它表示我的setting.py文件中的第17行。第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')

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

如果您尝试在repl中运行它,则会看到:

>>> 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,)

答案 1 :(得分:0)

在“模板目录”中使用前斜杠 (/) 而不是逗号 (,):

像这样:'DIRS': [(BASE_DIR / 'templates')],

答案 2 :(得分:-1)

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', 
         ], 
         }, 
     }, 
]