2014-01-26 2 views
1

모델 인스턴스 목록이 있으며 각 인스턴스에 대한 값을 계산하여 페이지에 표시하려고합니다. 이 값을 템플릿에 전달하려고했을 때 막혔습니다.Django 템플릿 : 모델 속성별로 목록 요소에 액세스하십시오.

내 시도 : 1) 무언가는 {{ list.(model.pk) }}과 같습니다. 분명히 구문 오류입니다. 웹 및 문서를 검색했지만 유효한 부분을 "점"결합의 특정 부분을 평가하는 유효한 구문을 찾을 수 없습니다.

2) 모델에 비 데이터베이스 속성을 부여하고 간단하게 {{ instance.non_db_value }}으로 액세스하십시오. 그러나 템플릿은 모델 값을 데이터베이스에서 직접 가져 오는 것으로 보이므로이 역시 실패합니다.

모델리스트의 모든 모델 인스턴스를 하나의 목록 (두 번째 값 : 첫 번째 인스턴스 자체, 두 번째 값은 템플릿에 전달해야하는 계산 된 값)의 목록으로 래핑하는 것이 좋습니다. 내가 잘못된 방향으로 생각하고 -

{% for entry in wrapperlist %} 
    {{ wrapperlist.entry.0 }} <-> {{ wrapperlist.entry.1 }} 
{% endfor %} 

하지만이 그것을하지 않을 수 있다고 생각하지 않습니다 :이 ,이 같은 뭔가 값에 액세스 할 수 있습니다? 어떤 제안이나 아이디어?

+0

장고 템플릿 필터 또는 태그 ... – miki725

답변

0

우선 템플릿은 DB에서 직접 모델 값을 가져 오지 않습니다. 템플릿 프로세서의 경우 모델 인스턴스는 또 다른 객체입니다.

#views.py 
foo_list = models.Foo.objects.all() 

for foo in foo_list: 
    foo.non_db_property = some_method() 

render_to_response('template.html', {'foo_list': foo_list}) 

및 템플릿 : 그래서, 그것은에 완전히 괜찮

{% for foo in foo_list %} 
    <li>{{ foo.non_db_property }}</li> 
{% endfor %} 

그것이 당신을 위해 작동 오류를 확인하지 않는 경우. 나는

#models.py 
class Foo(models.Model): 
    bar = models.CharField(max_length=3) 
    .... 
    def non_db_value(self): 
     #calculate 
     return value 

템플릿

+0

덕분에 상기와 동일하게 유지됩니다

또 다른 방법은 값이 전용 모델의 특성을 기반으로하는 경우 모델 방법을 만드는 것입니다 그것을 얻었습니다 - 나는 코드를 리팩토링했고 이제 문제는 신비하게 사라졌습니다. 내가 한 주요한 점은 변수 저장 .all() (list = Model.objects.all())을 두 번 반복하는 것으로 반복하여 Model.objects.all()의 모든 항목을 두 번째 버퍼 목록에 넣는 것이 었습니다. 비 db 값을 삭제하십시오. 이상한. – Faquarl

관련 문제