Python: Объект 'NoneType' не является подписываемым
Прошу помощи в этом вопросе.
def home(request):
client = pymongo.MongoClient(settings.MONGO_SERVER)
main_db = client[settings.MONGO_DATABASE]
get_main_config = main_db.configurations.find_one({"name": "main_config"})
return render(request, 'dashboard/home.html', {"data": get_main_config["homepage_urls"]})
Traceback (last recent call last):
render(request, 'dashboard/home.html', {"data": get_main_config["homepage_urls"]})
TypeError: 'NoneType' object is not subscriptable
Почему ошибка возникла в этой строке? Спасибо.
Ошибка появляется, когда вы используете оператор [] на переменной, значение которой равно None. Поэтому это может быть только get_main_config
. Просто выведите переменную для проверки.
Это означает, что get_main_config
имеет тип None
, а None
не является подзаписываемым типом. Чтобы объект был подзаписываемым в Python, он должен поддерживать индексацию (списки, кортежи, строки и т.д. являются подзаписываемыми). Здесь, поскольку get_main_config
является None
(который не поддерживает индексацию), и вы пытаетесь получить доступ к ключу 'homepage_urls'
из него, вы получаете ошибку.
Используемый вами метод find_one
предназначен для поиска одного документа, соответствующего вашему запросу, или возвращает None
, если не смог найти ни одного. (https://pymongo.readthedocs.io/en/stable/tutorial.html#getting-a-single-document-with-find-one)
Итак, вы можете захотеть убедиться, что документ, соответствующий запросу {'name': 'main_config'}
, действительно существует в вашей базе данных.