2017-05-23 5 views
2

저는 장고 1.11, Apache 2.2 및 mod_wsgi를 모두 사용하여 Python 2.7을 사용하는 웹 응용 프로그램을 만들고 있습니다. 내 페이지를 렌더링하는 데 문제가 있습니다. 전체 역 추적이입니다 예외 값 : context는 WSGIRequest가 아닌 dict이어야합니다.

Environment: 


Request Method: GET 
Request URL: http://website.com/~user/irtf/ 

Django Version: 1.11.1 
Python Version: 2.7.13 
Installed Applications: 
['irtf.apps.IrtfConfig', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'mod_wsgi.server'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    41.    response = get_response(request) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/path/irtf_website/mysite/irtf/views.py" in index 
    18.   return HttpResponse(template.render(request)) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/backends/django.py" in render 
    64.   context = make_context(context, request, autoescape=self.backend.engine.autoescape) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/context.py" in make_context 
    287.   raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__) 

Exception Type: TypeError at /irtf/ 
Exception Value: context must be a dict rather than WSGIRequest. 

views.py입니다

def index(request): 
     template = loader.get_template('irtf/index.html') 

     return HttpResponse(template.render(request)) 

그것은 중요하지 않을 수도 있지만,이 페이지의 내 템플릿 그냥 텍스트와 링크로 구성되어 있습니다.

답변

10

첫 번째 parameter이 사전으로되어 있기 때문입니다. 당신은 아마도 render shortcut 대신

return render(request,'irtf/index.html') 
+0

감사합니다 사용하려면 렌더링 지름길

template = loader.get_template('irtf/index.html') return HttpResponse(template.render({}, request)) 

으로이 혼합했다. 튜토리얼 페이지 (https://docs.djangoproject.com/en/1.11/intro/tutorial03/)의 HttpResponse는 dicts가 전달되지 않고 사용되기 때문에 혼란 스럽다. 설명서가 올바르지 않거나 내가보고 있지 않은 차이점이 있습니까? – Alexa

+0

거기에 사전없이 사용되는 렌더링 바로 가기입니다. 어떤 곳에서는 다른'template.render'에서'render' 단축키를 사용했습니다. 비슷한 모양이지만 다른 행동을합니다. 튜토리얼은 틀리지 않지만 혼란 스럽습니다. – e4c5

+0

여기에 오류가 발생하는 HttpResponse가 아니라 예외를 throw하는 Template.render 메서드입니다. [Template.render] (https://github.com/django/django/blob/master/django/template/backends/django.py#L58)의 메소드 서명은 컨텍스트와 요청이 키워드 인수로 지정되어야하며, 즉'template.render (request = request, context = context)'이거나 요청과 컨텍스트가 위치 인수, 즉'template.render (None, request)'로 제공되어야합니다. render에 대한 호출이 수정되면 HttpResponse에 유효한 첫 번째 인수 인 문자열을 반환합니다. – ARJMP