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'}, действительно существует в вашей базе данных.

Вернуться на верх