type object argument after ** must be a mapping, not str

type object argument after ** must be a mapping, not str
type object argument after ** must be a mapping, not str_第1张图片
django自定义fdfs文件存储时报了这个错误。

创建client实例对象的时候不能直接传入配置文件的地址字符串,否则报错.
错误代码:TypeError: type object argument after ** must be a mapping, not str

解决方法:
原代码中的client_conf = settings.FDFS_CLIENT_CONF注释掉
换成client_conf = get_tracker_conf(r’C:\Users\Administrator\PycharmProjects\dailyfresh\utils\fdfs\client.conf’)

原本我们在_save()函数中使用Fdfs_client()创建对象时,是给它直接传了一个client.conf的文件路径,但现在这么做会导致报错,改进的方法其实是:不直接给Fdfs_client()传递配置文件的路径,而是先调用get_tracker_conf()函数,获取配置文件的内容,然后再把这个内容传递给Fdfs_client()作为参数,创建对象。

并且注意:要用绝对路径,使用相对路径也会报错的,不信你把
client_conf = settings.FDFS_CLIENT_CONF改成
client_conf = get_tracker_conf(settings.FDFS_CLIENT_CONF)
会报另一个错误:
configparser.NoOptionError: No option ‘connect_timeout’ in section: ‘config

原代码截图:
type object argument after ** must be a mapping, not str_第2张图片
修改后的截图:

type object argument after ** must be a mapping, not str_第3张图片

你可能感兴趣的:(Django报错)