首页 > 解决方案 > 在 Django 模板中显示数据库图像时如何修复“TypeError:join()”

问题描述

我正在尝试使用 image.url 属性通过管理页面显示一些上传到我的数据库的图像。页面加载时,image.url 正确,但终端显示内部服务器错误,回溯以“TypeError: join() argument must be str or bytes, not 'list'”结尾

我找不到具体调用 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)

设置.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'

我希望能够使用模板标签功能来显示数据库中的相关图像。目前我只是想显示我的默认图像,但是,实际图像将比一个文件夹低一个文件夹。

标签: pythondjango

解决方案


MEDIA_ROOT应该是 astring而不是list.

改变:

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

到:

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

推荐阅读