#python-3.x #django #django-3.0
#python-3.x #django #django-3.0
Вопрос:
Я просто создаю простую страницу hello world в своем приложении Django 3, я получаю сообщение об ошибке
TypeError: 'module' object is not callable
Вот ошибка
TypeError at /
'module' object is not callable
Request Method: GET
Request URL: http://127.0.0.1:8000/
Django Version: 3.0.11
Exception Type: TypeError
Exception Value:
'module' object is not callable
Exception Location: C:UsersadminAppDataRoamingPythonPython37site- packagesdjangotemplatecontext.py in bind_template, line 246
Python Executable: C:Program Files (x86)Microsoft Visual
StudioSharedPython37_64python.exe
Python Version: 3.7.8
Python Path:
['C:\Users\admin\Repositories\django-docker\django-portal-base\app',
'C:\Program Files (x86)\Microsoft Visual '
'Studio\Shared\Python37_64\python37.zip',
'C:\Program Files (x86)\Microsoft Visual
Studio\Shared\Python37_64\DLLs',
'C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib',
'C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64',
'C:\Users\admin\AppData\Roaming\Python\Python37\site-packages',
'C:\Program Files (x86)\Microsoft Visual '
'Studio\Shared\Python37_64\lib\site-packages']
Server time: Thu, 14 Jan 2021 19:15:32 0000
Он работал раньше, но внезапно перестал работать сейчас. Вот мой views.py
from django.shortcuts import render
# from django.http import HttpResponse
# from django.template import RequestContext, loader
# from django.template import Context
def index(request):
"""Placeholder index view"""
print('XXXX')
return render(request, 'hello_world/index.html')
#return HttpResponse('Hello, World!')
def test(request):
context = {'foo': 'bar'}
return render(request, 'hello_world/index.html', context)
Ошибка находится в строке return render(request, 'hello_world/index.html')
, но когда я меняю ее на return HttpResponse('Hello, World!')
нее, она работает нормально.
Мой HTML-файл очень прост index.html
<h3> MY DJANGO APP</h3>
HTML-файл также находится в правильной папке templates/hello_world/index.html
Настройки
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': False,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.contrib.sessions'
],
},
},
]
Комментарии:
1. у рендеринга проблемы с поиском
hello_world/index.html
. Вы должны проверить своюsettings.py
переменную TEMPLATES и посмотреть, соответствует ли путь местоположению папки вашего шаблона.2. @Johnson Спасибо, но я не думаю, что это как-то связано с путем. Это правильно, и если я намеренно укажу неверный путь, ошибка будет TemplateDoesNotExist, что не так
3. @jackhammer013 Вероятно, это проблема, связанная с обработчиками контекста шаблона. Смотрите Строку 246 , она запускает процессоры контекста шаблона. Вероятно, потому, что контекстный процессор не вызывается. Пожалуйста, опубликуйте свои
TEMPALTES
настройки.4. @xyres не уверен, есть ли проблема с моими настройками, но я опубликовал ее. Спасибо!
Ответ №1:
django.contrib.sessions
не является вызываемым объектом, следовательно, он не является допустимым контекстным процессором.
На самом деле, это приложение, и поэтому оно должно быть в вашем INSTALLED_APPS
списке, а не в TEMPALTES
context_processors
списке. Удаление его оттуда должно устранить эту проблему.
Почему это происходит?
В исключении упоминается, что это происходит в django/template/context.py
строке 246 (в Django v3.0.11). Если вы видите исходный код в строке 246, вы можете увидеть, что в этой строке Django запускает зарегистрированные процессоры контекста шаблона. Поскольку django.contrib.sessions
это не вызываемый объект, а модуль, вы получаете это сообщение об исключении : 'module' object is not callable
.
Комментарии:
1. Вау. Это сработало! Большое вам спасибо и за объяснение ошибки. Я не понял, что происходит. Также, возможно, я по ошибке поместил этот файл django.contrib.sessions. Вы сэкономили мне много времени. Спасибо!