【问题标题】:Django For Beginers - Joinpath error when running manage.py runserverDjango For Beginers - 运行 manage.py runserver 时出现 Joinpath 错误
【发布时间】:2021-04-22 09:04:10
【问题描述】:

我正在学习 Djnago,我遇到了一个我环顾四周但无法解决的问题。 所以基本上在 Django For Beginners 的第 45 页上,作者说:

" 接下来我们需要更新 config/settings.py 来告诉 Django 我们新模板的位置 目录。这是对 TEMPLATES 下设置 'DIRS' 的单行更改。” 代码

config/settings.py

TEMPLATES = [
{
...
'DIRS': [str (BASE_DIR. joinpath('templates '))], # new
...
},
]

所以在我的 settings.py 文件中我有这个:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [str(BASE_DIR.joinpath('templates'))],  # new
        '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',
            ],
        },
    },
]

不幸的是,当我运行 manage.py 运行服务器时,我会收到以下消息:

  File "C:\Users\User\Desktop\pages\manage.py", line 22, in <module>
    main()
  File "C:\Users\User\Desktop\pages\manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\User\.virtualenvs\pages-8ZErAoFj\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line
    utility.execute()
  File "C:\Users\User\.virtualenvs\pages-8ZErAoFj\lib\site-packages\django\core\management\__init__.py", line 363, in execute
    settings.INSTALLED_APPS
  File "C:\Users\User\.virtualenvs\pages-8ZErAoFj\lib\site-packages\django\conf\__init__.py", line 82, in __getattr__
    self._setup(name)
  File "C:\Users\User\.virtualenvs\pages-8ZErAoFj\lib\site-packages\django\conf\__init__.py", line 69, in _setup
    self._wrapped = Settings(settings_module)
  File "C:\Users\User\.virtualenvs\pages-8ZErAoFj\lib\site-packages\django\conf\__init__.py", line 170, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "c:\users\user\appdata\local\programs\python\python39\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "C:\Users\User\Desktop\pages\config\settings.py", line 58, in <module>
    'DIRS': [str(BASE_DIR.joinpath('templates'))],  # new
AttributeError: 'str' object has no attribute 'joinpath'

我敢打赌,这个错误是非常基本的,我没有找到正确的方向,但是自从我开始寻找答案以来已经将近一天了,所以如果有人可以帮助我,我将非常感激。

谢谢大家,祝你有美好的一天。

【问题讨论】:

  • BASE_DIR 是如何定义的。如果它应该有一个joinpath 方法,我希望它是一个pathlib.Path
  • @Matthias 这是我为 BASE_DIR 提供的内容,import os from pathlib import Path # 在项目内部构建路径,如下所示:BASE_DIR / 'subdir'。 BASE_DIR = os.path.dirname(os.path.abspath(__file__))
  • 所以BASE_DIR被定义为一个字符串。由于您已经拥有from pathlib import Path,您可以使用BASE_DIR = Path(__file__).parent.absolute() 定义BASE_DIR
  • @Matthias 就是这样!天哪,非常感谢!你让我今天一整天都感觉很好 ! :-)

标签: python python-3.x django


【解决方案1】:

首先,您需要在 settings.py 上“导入操作系统”。

然后转到模板并更改...

'DIRS': [os.path.join(BASE_DIR, 'templates'),],

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates'),],
    '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',
        ],
    },
},

]

#我希望你得到你的解决方案。谢谢。

【讨论】:

    【解决方案2】:

    加入即你可以使用`

    'DIRS': [str(os.path.join(BASE_DIR,"Templates"))],

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多