2013-03-01 5 views
2

프로젝트 관리 응용 프로그램에서 티켓 또는 편집자의 소유자 (예 : 작성자) 인 경우 티켓을 편집/삭제할 수 있어야합니다. 티켓이 속한 프로젝트 나는이 문제를 결정하기 위해 사용자 정의 필터를 사용하려면 프로젝트를 표시하기위한 템플릿에서 사용자 정의 필터 - 두 개의 인수가 필요합니다.

는 여기에 본으로 사용 : 아래
{% if ticket|owner_or_admin:user %} 
    <p> 
     <a href="{% url ticket_edit project.id %}">Edit</a> 
     <a id="delete_link" href="{% url ticket_delete ticket.id %}">Delete</a> 
    </p> 
{% endif %} 

이 사용자 정의 필터를 만드는 시도이지만,이 오류가 (발생

@register.filter(name='owner_or_admin') 
def ownership(ticket, project, user): 
    if ticket.user == user: 
     return true;  
    else: 
     if project.added_by_user == user: 
      return true 
    return false 

모델 :

class Project(models.Model): 
    ... fields ... 
    added_by_user = models.ForeignKey(User) 

class Ticket(models.Model): 
    ... fields ... 
    user = models.ForeignKey(User) 
) 'owner_or_admin 2 개 인자, 제공 1이 필요합니다'3210

그래서 두 가지 인수를 제공하려면 어떻게해야합니까? 그렇지 않으면 사용자 정의 필터가 올바 릅니까?

미리 감사드립니다.

답변

3

템플릿 필터 according to the docs에 여러 개의 인수를 전달할 수는 없지만 대신 두 개의 필터를 사용할 수 있습니다.

템플릿 :

{% if ticket|owner:user or project|admin:user %} 
    <!-- blah --> 
{% endif %} 

필터 :

@register.filter(name='owner') 
def ownership(ticket, user): 
    return ticket.user == user 

@register.filter(name='admin') 
def adminship(project, user): 
    return project.added_by_user == user 

(편집 : 또한, 필터 코드에 논리 값은 대문자이어야 함)

+0

완벽한, 고마워요! – holyredbeard

관련 문제