我正在将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')
有什么建议吗?
答案 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',
],
},
},
]