2010-03-18 3 views
37

Django의 템플릿에 일부 레코드를 반환하는 함수를 전달하고 있습니다. 이 함수를 호출하고 결과를 반복합니다.Django 템플릿에서 인수를 취하는 함수를 호출하는 방법은 무엇입니까?

{% for item in my_func(10) %} 

그래도 작동하지 않습니다. 함수의 반환 값을 변수로 설정하려고 시도했지만 변수를 반복했지만 Django 템플릿에서 변수를 설정할 수있는 방법이없는 것 같습니다.

정상적인 방법이 있습니까?

답변

47

템플릿에 인수가 필요한 함수를 호출 할 수 없습니다. 대신 Write 템플릿 태그 또는 필터.

+57

내부

<h3> Latest Songs </h3> {% include "song_player_list.html" with songs=latest_songs %} 

. 나는 더 간단한 방법을 원합니다. – cleg

+1

나는 파이썬'@ property'를 내장 한 솔루션이 상황에 따라 더 나은 해결책이라고 생각합니다. – jrast

+0

예, 그렇다고해서 문제가 해결되지는 않습니다. Django는 인수가 필요하지 않으면 함수를 자동으로 호출합니다.myfunc가 인자가없는 함수 인 경우'{% for item in myfunc %} '를 쓰는 것은'for item in myfunc()'와 같습니다. django의 유일한 실제 제한은'@ property'가 해결하지 못하는 인수를 필요로하는 함수를 호출하는 것입니다 (물론 템플릿의 일부 속성을 설정하여 인수로 사용할 수도 있지만 특히 깨끗하지는 않습니다) – matts1

8

나는 장고의 템플릿에 대신하는 기능으로, 나에게

가 왜 변수 저장 함수의 반환 값을 템플릿 장고에 통과하지 못한 일부 레코드를 반환하는 함수를 전달 해요?


나는 변수에 fuction를의 반환 값을 설정하고 변수를 반복하려고했으나 장고 템플릿에 변수를 설정하는 방법은없는 것 같다했습니다.

템플릿 대신 장고보기에서 변수를 설정하고 템플릿에 전달해야합니다.

+0

이 함수는 일부 레코드를 반환하고 매개 변수는 개수를 반환합니다. 템플릿에서이 값을 제어하고 싶습니다. – cleg

+2

함수를 느리게 평가하려면 어떻게해야합니까? 예 : 필요한 경우 결과를 사용할 수 있기를 원하지만 아무 것도 계산하지 않으려 고합니다. 나는 템플릿 태그를 쓰는 걸 멈췄다 고 생각합니다. – Rob

2

장고 템플릿은 임의의 파이썬 코드를 호출 할 수 없습니다. 디자이너가 템플릿을 작성하는 환경에서 보안 및 안전 기능을 제공하며 비즈니스 로직을 템플릿으로 마이그레이션하지 못하게합니다.

이렇게하려면 Jinja2 템플릿 (http://jinja.pocoo.org/docs/) 또는이를 지원하는 다른 템플릿 시스템을 사용하도록 전환 할 수 있습니다. django의 다른 부분은 의도적으로 단방향 프로세스이므로 사용하는 템플릿의 영향을받지 않습니다. 원한다면 같은 프로젝트에서 여러 템플릿 시스템을 사용할 수도 있습니다.

15

개체가있는 경우 @property으로 정의하여 전화를 걸지 않고 결과를 얻을 수 있습니다. 예 : 다음 템플릿

class Item: 
    @property 
    def results(self): 
     return something 

는 :

<% for result in item.results %> 
... 
<% endfor %> 
+0

@sherpya에 대한 참고 자료가 있으십니까? – bozdoz

+2

python 기본 제공 속성 http://docs.python.org/2/library/functions.html#property – sherpya

+0

동일하지 않습니다. 배열의 내용은 다른 클래스의 항목이 될 수 있습니다. – kentor

1

당신이 다음 다른 템플릿 파일과 "기능"을 생성하고 할 수있는 것은에 매개 변수를 전달 해당 파일을 포함합니다.

내부 index.html을 매우 슬픈 song_player_list.html

<ul> 
{% for song in songs %} 
<li> 
<div id='songtile'> 
<a href='/songs/download/{{song.id}}/'><i class='fa fa-cloud-download'></i>&nbsp;Download</a> 

</div> 
</li> 
{% endfor %} 
</ul> 
+0

버튼을 클릭했을 때만'{% include "song_player_list.html"songs = latest_songs %} "를 어떻게 제어 할 수 있습니까? 나는 함수에 넣으려고했지만'장고 틀'은 페이지를로드 할 때마다 그것을 실행한다. –

관련 문제