【问题标题】:AttributeError: 'WindowsPath' object has no attribute 'endswith'AttributeError:“WindowsPath”对象没有属性“endswith”
【发布时间】:2021-02-16 20:46:22
【问题描述】:

当我运行我的项目时,就会出现这个错误。

Exception in thread django-main-thread:
Traceback (most recent call last):
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\threading.py", line 916, in _bootstrap_inner
    self.run()
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\threading.py", line 864, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\core\management\commands\runserver.py", line 118, in inner_run
    self.check(display_num_errors=True)
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\core\management\base.py", line 396, in check
    databases=databases,
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\core\checks\registry.py", line 70, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\contrib\staticfiles\checks.py", line 9, in check_finders
    finder_errors = finder.check()
  File "C:\Users\Mowgli\anaconda3\envs\surajDjangoEnv\lib\site-packages\django\contrib\staticfiles\finders.py", line 81, in check
    if prefix.endswith('/'):
AttributeError: 'WindowsPath' object has no attribute 'endswith'

【问题讨论】:

  • 我没有在任何地方声明 WindowsPath 也没有导入它们为什么会出现这个错误?
  • 向我们展示您的设置(不包括私人信息)!您使用的是哪个 Django 版本?
  • 嗨 Suraj,请提供相关代码。但是,如果您将代码更改为 if str(prefix).endswith('/') 来解决此处的特定问题,这应该就足够了。但是由于您没有解释,您正在尝试做什么,因此很难猜测是否有更好的解决方案。
  • @n00by0815 代码在 Django 库中,在那里更改会产生更新问题。我怀疑 Django 中有错误的数据或错误。
  • @KlausD。你是对的,我很抱歉我没有正确阅读错误信息。仍然缺少他的操作系统(尽管从路径看起来像 windows)以及他的 Python/Anaconda 和 Django 版本。而且我似乎没有在他的回溯中看到任何路径,他可能在他的代码中设置了某个位置。也许他只是将其设置为 Path(something) 而不是仅提供字符串格式的路径。很难说

标签: python django


【解决方案1】:

""" learning_user 项目的 Django 设置。

由 'Django-admin start project' 使用 Django 3.1.1 生成。

有关此文件的更多信息,请参阅 https://docs.djangoproject.com/en/3.1/topics/settings/

有关设置及其值的完整列表,请参阅 https://docs.djangoproject.com/en/3.1/ref/settings/ """

从路径库导入路径

在项目内部构建路径,如下所示:BASE_DIR / 'subdir'。

【讨论】:

    【解决方案2】:

    这个错误是由于静态文件的配置造成的

    试试这个:

    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = [
        BASE_DIR / "static",
    ]
    
    STATIC_ROOT = BASE_DIR / "staticfiles"
    
    MEDIA_URL = "/media/"
    
    MEDIA_ROOT = BASE_DIR / "media"
    

    您不必使用 os 模块,没有必要。 BASE_DIR 已在您的 settings.py 文件中定义。

    STATICFILES_DIRS 用于部署。如果你愿意,你现在可以删除它。

    click for detailed explanation

    【讨论】:

      【解决方案3】:

      您可以通过 parts 属性获取 WindowsPath 对象的部分内容。选择最后一部分并使用 endswith 属性。

      import pathlib
      import os
      
      path_to_here = pathlib.Path(os.getcwd())
      last_part = path_to_here.parts[-1]
      print(last_part.endswith('ending'))
      

      【讨论】:

        猜你喜欢
        • 2016-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-24
        • 1970-01-01
        • 2012-12-01
        • 2021-04-19
        • 2013-09-15
        相关资源
        最近更新 更多