Как разрешить typeError: unsupported operand type(s) for /: 'str' и 'str' в django app by heroku?

Когда я развернул приложение django с помощью heroku, я получил ошибку.

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))

Setting.py имеет этот BASE_DIR.

Как устранить эту ошибку?

Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/app/.heroku/python/lib/python3.8/site-packages/django/core/management/__init__.py", line 386, in execute
    settings.INSTALLED_APPS
  File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 87, in __getattr__
    self._setup(name)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 74, in _setup
    self._wrapped = Settings(settings_module)
  File "/app/.heroku/python/lib/python3.8/site-packages/django/conf/__init__.py", line 183, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/app/.heroku/python/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 848, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/app/MovieReview/settings.py", line 77, in <module>
    'DIRS': [BASE_DIR / 'templates'],
TypeError: unsupported operand type(s) for /: 'str' and 'str'

Потому что вы не можете использовать оператор / между строками.

Вы должны использовать либо следующее:

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

или используйте pathlib для создания BASE_DIR пути:

from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

Оператор pathlib позволяет использовать оператор / для соединения нескольких путей:

from pathlib import Path

p1 = Path('/tmp')
p2 = p1 / 'dir1'  # it's similiar to os.path.join(p1, 'dir1')
Вернуться на верх