2013-07-27 5 views
2

컨텍스트 프로세서를 사용하여 동적 세로 막대를 작성하려고합니다. 나는 데이터베이스 테이블에서 사이드 바에 대해 구별되는 값을 사용한다. 내가 코드 views.py에서Django 컨텍스트 프로세서 - 'str'개체를 호출 할 수 없습니다.

from clients.models import client 
def sidebar(request): 
     return {'clientlist': client.objects.order_by('name').distinct('name')} 

다음과 같습니다 : 모든 클라이언트 및 데이터가있는 테이블을 생성하는 데 사용

from django.shortcuts import render 
from django.template import loader, RequestContext 
from clients.models import client 
def index(request): 
     allclientlist = client.objects.all() 
     return render (request, 'clients/index.html', {'allclientlist': allclientlist}, context_instance=RequestContext(request, processors=['sidebar'])) 

allclientlist

여기 내 상황에 맞는 프로세서입니다. I가 필요

def index(request): 
     allclientlist = client.objects.all() 
     clientlist = client.objects.order_by('name').distinct('name') 
     return render(request, 'clients/index.html', {'allclientlist': allclientlist, 'clientlist': clientlist}) 

그러나 모든보기에서 사용할 수있는이 메뉴를 만들기 위해 : 다음 나는 같은 때 그것은 일

Traceback: 
File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/root/projects/webapp/clients/views.py" in index 
    7. return render (request, 'clients/index.html', {'allclientlist': allclientlist}, context_instance=RequestContext(request, processors=['sidebar'])) 
File "/usr/local/lib/python2.7/site-packages/django/template/context.py" in __init__ 
    179.    self.update(processor(request)) 

Exception Type: TypeError at /clients/ 
Exception Value: 'str' object is not callable 

역 추적 다음 상황에 맞는 프로세서 동적 사이드를 구축하고 얻으려고 모든보기에서 clientlist 선언이 있습니다. 나는 이것을 피하고 붙어 싶었다. 제발,이 오류를 찾을 수 있도록 도와주세요. 당신이 render 바로 가기를 사용할 때, 템플릿이 자동으로 요청 컨텍스트와 렌더링 - 당신이 원하는 경우

+1

'processor' 또는'self.update'는 문자열입니다. 코드베이스에서 두 이름을 모두 검색하고 잘못 정의한 것을 찾아야합니다. –

+1

'프로세서 = [ '사이드 바']'나에게 전화를 걸지 않습니다. 그것을 실제 함수로 바꾸면 작동 할거야 : – Wolph

+0

하지만 내 실제 함수는 '사이드 바'이다. 나는 내 코드가 맞는지 아닌지 잘 모르기 때문에 djangobook에서이 코드를 가져왔다. – mattveiko

답변

0

clientlist는 다음 TEMPLATE_CONTEXT_PROCESSORS 설정 client.models.sidebar를 추가하고보기에서 render 통화에서 context_instance 인수를 제거 모든 뷰에 포함 .

def index(request): 
    allclientlist = Client.objects.all() 
    return render(request, 'clients/index.html', {'allclientlist': allclientlist}) 

여담으로, 장고 대회는 client.context_processors 모듈에 사이드 바의 상황에 맞는 프로세서를 이동하고, Client로 모델을 활용하는 것입니다.

+0

그것은 TEMPLATE_CONTEXT_PROCESSORS에 있습니다
>>>
>>> settings.TEMPLATE_CONTEXT_PROCESSORS
('django.contrib.auth.context_processors.auth', 'django.core.context_processors.debug'django.conf 가져 오기 설정에서, 'django.core.context_processors.i18n', 'django.core.context_processors.media', 'django.core.context_processors.static', 'django.core.context_processors.tz', 'django.contrib.messages.context_processors.messages ','clients.templateprocessors.sidebarprocessor.sidebar ') – mattveiko

+0

사이드 바 메소드가'client.templateprocessors.sidebarprocessor' 모듈에 있으면 괜찮아 보입니다. render 호출에서 context_instance 인수를 제거 했습니까? 지금 어떤 오류가 있습니까? – Alasdair

+0

이제 render_to_string()은 키워드 인자 'context_instance'에 대해 여러 개의 값을가집니다. ('request', clients/'' – mattveiko

관련 문제