2016-11-05 6 views
2

사용자 정의 템플릿 필터에 여러 인수를 보내는 방법을 알 수 없습니다.Django - 템플릿 태그 내부의 변수 문자열

문제는 템플릿 변수를 인수로 사용한다는 것입니다.

사용자 지정 템플릿 필터

@register.filter 
def is_scheduled(product_id,dayhour): 
    day,hour = dayhour.split(',') 
    return Product.objects.get(id=product_id).is_scheduled(day,hour) 

정상적인 사용

{% if product.id|is_scheduled:"7,22" %}...{% endif %} 

선 위에서 나는 두 개의 인수를 넣어 같이 제대로 작동 것 - (테스트 - 작품) 필터로 7 (22) . 문제는 일반 텍스트/문자열 대신 변수를 인수로 넣고 싶다는 것입니다. 내 템플릿에서

:

{% with day=forloop.counter|add:"-2" hour=forloop.parentloop.counter|add:"-2" %} 

지금, 나는 인수로 {{ day }}{{ hour }}을 사용하고 싶습니다.

나는 예를 들면 시도 :

{% if product.id|is_scheduled:"{{ day }},{{ hour }}" %}...{% endif %} 

그러나이 제기

예외 값 : 유효하지 않은 문자 인터넷 용() 기본 10 : '{{일}}'

아이디어가 있으십니까?

답변

3

{% %} 안에있을 때 {{}}이 필요하지 않습니다. 해당 태그에서 직접 이름을 사용하고 문자열 concat 템플릿 구문 add을 사용하면됩니다. 경우 day에서

hour는 문자열로 유형 변환은 문자열을 concating 전에해야합니다, 문자열 :

{% with day|stringformat:"s" as sday hour|stringformat:"s" as shour %} 
    {% with sday|add:","|add:shour as arg %} 
     {% if product.id|is_scheduled:arg %}...{% endif %} 
    {% endwith %} 
{% endwith %} 
+0

불행하게도,이 작동하지 않습니다. 이유가 확실하지 않습니다. 아마, 하루와 시간은 정수입니다. 반환 값 : 예외 값 : \t 'int'객체에는 'split'속성이 없으며 dayhour 변수를 인쇄하면 "0,2"대신 0이 인쇄됩니다. –

+0

타입 변환을 포함하도록 답변을 업데이트했습니다. –

+0

좋은 접근 방식과 같지만 구문에는 문제가 있습니다. u'hour | stringformat : "s" '오류의 요점을 파악하려고합니다. –

관련 문제