2012-04-22 5 views
1

내가으로 체인을 사용에서 :템플릿에서 장고 체인 사용 방법?

장소를 표시 할 수있어하지만 어떻게 이벤트 또는 사진을 표시하는 템플릿 파일

{% for item in result_list %} 

     <a href="{% url view_place item.slug %}">{{item.title}}</a> 

    {% endfor %} 

에서 views.py

places_list = Place.objects.all().order_by('-datetimecreated')[:5] 
events_list = Event.objects.all().order_by('-datetimecreated')[:5] 
photos_list = Photo.objects.all().order_by('-datetimecreated')[:5] 
result_list = list(chain(photos_list, places_list, events_list)) 

에서?

 <a href="{% url view_event item.slug %}">{{item.title}}</a> 
     <a href="{% url view_photo item.slug %}">{{item.caption}}</a> 

미리 감사드립니다.

답변

3

귀하의 질문에 올바르게 답변하는 데 더 많은 것을 알아야하지만, 여기에 도움이되는 몇 가지 아이디어가 있습니다. photos_list, places_listevents_list은 모두 장고 모델 인 다른 클래스의 객체라고 가정합니다.

옵션 1 :

class Photo(models.Model): 
    def type(self): 
     return 'photo' 

및 다음 검사 : 오브젝트의 유형을 결정 각 클래스의 메소드를 정의

예를 들어, 다음과 같이, 각 모델에 content_type 방법을 정의 이 템플릿에 :

{% for item in result_list %} 
    {% if item.type == "photo" %} 
     ... 
    {% elif item.type == "place" %} 
     ... 
    {% else %} 
     ... 
    {% end %} 
{% endfor %} 

옵션 2 :정의각 클래스의 메서드

이것은 아마도 더 못 생기는 일이지만, 해당 개체에 대해 침투하려는 전체 HTML을 반환하는 각 개체에 render 메서드를 정의 할 수 있습니다.

{% for item in result_list %} 
    {{ item.render }} 
{% endfor %} 

(!) 참고가 : 그런 다음 템플릿에서이 일의 사건 상속 고려는

그것은 사진, 장소 ​​같은 소리와 이벤트는 같은 피드에 나타날 수있는 모든 것들, 그리고 공통 필드 (예 : posted_at)를 공유 할 수 있습니다. 이와 관련하여 고려해야 할 여러 가지가 있으므로 Django documentation on model inheritance을 살펴 보는 것이 가장 좋습니다.

+0

안녕하세요, 재생 주셔서 감사합니다, 죄송합니다 "사진, 이벤트, 장소"다른 모델이라는 것을 언급하는 것을 잊지 – Hamza

+0

내 대답은 그들이 다른 모델이라고 가정하므로 괜찮습니다. –

+0

Working, 모두 다 고맙다 : D – Hamza

2

템플릿에서 사용할 수있는 각 모델에 대해 "프록시"속성을 정의 할 수 있습니다. 이 같은 것을 고려해

템플릿에서
class Photo(models.Model): 
    ... # fields etc. 

    @property 
    def url(self): 
     ... # return reversed url now 

    @property 
    def caption(self): 
     ... # same idea, access title/whatnot 

는 다음과 같이 보일 수 있습니다

{% for item in item_list %} 
    <a href="{{ item.url }}">{{ item.caption }}</a> 
{% endfor %} 
+0

감사합니다. 처음 프록시를 시도합니다 ...: D – Hamza

+0

실제로 속성을 만들 필요가 없다고 생각합니다. 템플릿 엔진은 메서드 인 경우 메서드를 호출합니다. – tobych

+0

@ Toby. 시원한. 그거 알아두면 좋을거야. :) –

관련 문제