Как исправить 'TypeError: join ()' при отображении изображений БД в шаблонах Django - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь отобразить некоторые изображения, загруженные в мою БД через страницу администратора, используя атрибут image.url. Когда страница загружается, image.url является правильным, но терминал отображает внутреннюю ошибку сервера с обратной трассировкой, заканчивающейся «аргументом TypeError: join () должен быть str или байты, а не« список »»

Iне могу найти, где конкретно вызывается метод join, так как трассировка, похоже, говорит только о внутренних файлах.

Я думал, что это может быть связано с функцией сохранения переопределения, но комментирование функции дает те же результаты.

settings.py STATIC и MEDIA и MEDIA_URL все установлены.

Шаблон:

 <img class='project-details-image' src="{{ project.image.url }}

Модель:

image=models.ImageField(upload_to='project-covers/', default='/Default.png', null=True)

settings.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, '/my_portfolio/my_portfolio/static/')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'my_portfolio/static'),
]
MEDIA_ROOT = [
    os.path.join(BASE_DIR, 'my_portfolio/img'),
]
MEDIA_URL = '/img/'

Трассировка:

File "/home/user/django-portfolio/lib/python3.5/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/home/user/django-portfolio/lib/python3.5/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/user/django-portfolio/lib/python3.5/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/user/django-portfolio/lib/python3.5/site-packages/django/views/static.py", line 36, in serve
    fullpath = Path(safe_join(document_root, path))
  File "/home/user/django-portfolio/lib/python3.5/site-packages/django/utils/_os.py", line 32, in safe_join
    final_path = abspath(join(base, *paths))
  File "/usr/lib/python3.5/posixpath.py", line 89, in join
    genericpath._check_arg_types('join', a, *p)
  File "/usr/lib/python3.5/genericpath.py", line 143, in _check_arg_types
    (funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'list'

Id likeчтобы иметь возможность использовать функцию тега шаблона, чтобы показать соответствующее изображение из базы данных. В настоящее время я пытаюсь отобразить только мое изображение по умолчанию, однако фактическое изображение будет на одну папку ниже.

1 Ответ

2 голосов
/ 11 октября 2019

MEDIA_ROOT должно быть string, а не list.

Изменение:

MEDIA_ROOT = [
    os.path.join(BASE_DIR, 'my_portfolio/img'),
]

К:

MEDIA_ROOT = os.path.join(BASE_DIR, 'my_portfolio/img')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...