2012-07-11 3 views
0

나는 Event 클래스를 가지고 있습니다. 이벤트는 presenters입니다. presenters은 '참석자'목록에 배치됩니다. 발표자는 참석자 목록에 발표자가 있음을 나타내는 플래그가 있어야합니다. 즉, 자신의 아바타 {% if is_presenter %} 옆에 체크 표시가 있습니다. 현재 모든 참석자에게 체크 표시가 추가됩니다.사용자 정의 django 템플릿 태그/인수 무시 조건

presenters에 대해서만 플래그를 표시하고 싶습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 그냥 제시하는 사람들에게 보여주기 위해 체크 표시를 어떻게 추가합니까? (또한, 내 제목이이 상황에 맞는지 알 수 없습니다. 알려주세요.)

모델 :

class Event(models.Model): 
    title = models.CharField(max_length=200) 
    presenters = models.ManyToManyField(Profile, null=True, blank=True) 
    url = models.CharField(max_length=200) 
    description = models.TextField() 
    date = models.DateTimeField() 
    created = models.DateTimeField(auto_now_add=True) 
    modified = models.DateTimeField(auto_now=True) 
    tags = models.ManyToManyField(Tag, null=True, blank=True) 

class Attendee(models.Model): 
    event = models.ForeignKey(Event) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    profile = generic.GenericForeignKey('content_type', 'object_id') 

조회수 :

def event(request, id): 
    event = get_object_or_404(Event, id=id) 
    is_attending = False 
    is_presenter = False 
    if request.user.is_authenticated(): 
      profile = Profile.objects.get(user=request.user) 
     attendees = [a.profile for a in Attendee.objects.filter(event=event)] 
     if profile in attendees: 
      is_attending = True   
    for presenter in event.presenters.all(): 
     is_attending = True 
     try: 
      content_type = ContentType.objects.get(app_label='profiles', model='profile') 
      Attendee.objects.get(event=event, content_type=content_type, object_id=presenter.id) 
      is_presenter = True 
     except Attendee.DoesNotExist: 
      Attendee(event=event, profile=presenter).save() 

템플릿 :

{% for attendee in event.attendees %} 
    <div class="inline-block"> 
     <a href="/profile/{{ attendee.profile.get_type|lower}}/{{ attendee.profile.user.username }}"{% if attendee.profile.is_presenter %}title="Presenter" class="tooltip-below"{% endif %}> 
     <img width=30 height=30 src="{% if attendee.profile.avatar %}{% thumbnail attendee.profile.avatar 30x30 crop %}{% else %}{{ DEFAULT_AVATAR }}{% endif %}" /> 
     </a> 
     {% if is_presenter %} 
      <i class="icon-ok-sign"></i> 
     {% endif %} 
    </div> 
{% endfor %} 

답변

0

내가 바로 당신의 질문을 이해하지 않습니다. 그러나 문제는 귀하의 is_presenter 플래그가 객체의 속성이 아니라는 것입니다. 템플릿에서

... 
    if profile in attendees: 
     profile.is_attending = True 
for presenter in event.presenters.all(): 
    presenter.is_attending = True 

:

{% if profile.is_presenter %} 

* 우아한 솔루션이다 파이썬은 dinamically 속성을 만들 수 있기 때문에, 아마,이 솔루션은 이러한 방법으로 모델이 부울 VAR을 설정할 수 있습니다 is_presenter() 방법으로 프로파일 모델 확장 *

+0

솔루션을 추가하면 확인 표시가 사라집니다. 체크 표시가 전혀 표시되지 않는 유일한 방법은'try' 내에'is_presenter '를 넣는 것입니다. 나는 내가하려고하는 것은 참석자가 발표자인지 확인하는 것입니다. 그렇다면 플래그를 표시하십시오 (체크 표시). 잘하면 당신을위한 것들을 명확히하고, 당신의 제안에 감사드립니다. – Modelesq

관련 문제