2017-11-03 11 views
0

포스 캐스트 (pystache)에서 2 자리 숫자로 플로팅하는 함수를 작성하고 싶습니다.피스 티케 (pystache)의 람다 이해하기

문맥에서 플로트 번호와 함수가 모두 필요합니다. (이것이 뮈스ache의 올바른 철학이라고 생각합니다).

어떻게해야합니까?

문제를 명확히하기 위해 필자가 작성한 코드 스 니펫 한 쌍을 보여줍니다. 그들은 일하지 않는다.

코드 조각 (A) :

import pystache 

tpl = "{{#fmt}}{{q}}{{/fmt}}" 

ctx = { 
    'q' : 1234.5678, 
    'fmt' : lambda x: "%.2f" % float(x) 
} 

print pystache.render(tpl, ctx) 

이 오류와 함께 실패 "가 떠있는 문자열을 변환 할 수 없습니다 : {{Q}}". 나는이 오류를 이해할 수있다 : {{fmt}}는 {{q}} 전에 평가된다.

니핏 (b)는 :

import pystache 

tpl = "{{#q}}{{fmt}}{{/q}}" 

ctx = { 
    'q' : 1234.5678, 
    'fmt' : lambda x: "%.2f" % float(x) 
} 

print pystache.render(tpl, ctx) 

이것은 오류로 실패 "람다()는 정확히 1 인수 (0 주어진)합니다". 이 오류를 이해할 수 없습니다. 컨텍스트를 인수로 전달하면 안됩니까?

+0

어떤 자습서를 사용 했습니까? https://github.com/defunkt/pystache는 어떻게 사용되어야하는지 보여줍니다. –

+0

튜토리얼을 본 적이 있지만 예제는 매우 순진합니다. 실제 사용 사례에는 적용 할 수 없습니다. 대부분의 자습서는 JavaScript 용입니다. –

+0

문제 설명이 불완전합니다. 코드를 [mcve]로 업그레이드하고 원하는 결과와 오류의 전체 추적을 포함하십시오. 그렇지 않으면, 나는 당신이 실제로하고있는 일과 당신이 성취하고자하는 것을 알 수 없습니다. –

답변

0

짧은 대답 : mustache은 이것을 지원하지 않습니다. 모든 데이터 값이 사전 처리 될 것으로 기대합니다.

2012 년에 formating of dates, numbers and more · Issue #41 · mustache/spec으로 ppl은 다양한 구현을 제공합니다. 다른 템플릿 엔진에서 가져 왔으며 결론에 도달하지 못했습니다.

mustache.js date formatting에 따르면, ppl은 여러 가지 확장 기능 및/또는 해결 방법을 구축했습니다 (나에게 가장 유망한 도구는 {{value | format}} syntax extension). 다른 마크 업 엔진으로 이동할 것을 제안했습니다.


추가 정보 :

(http://mustache.github.io 첫 페이지 더 적은에서 링크 없음) http://mustache.github.io/mustache.5.html에서의 사양은 무효이며, 2009 년 pystachehttps://github.com/mustache/spec에 상주하는 다음, 너무, 포기 보이는 최신 사양 날짜가 기입하십시오 최신 커밋은 02.2015 일자이며 the latest spec update은 2011 년입니다. Nor does it have a successor.

그래서이 시점까지는 표준이 죽었고 마크 업은 자유롭게 모든 것을 확대 할 수 있습니다.

휠을 다시 만들기 전에 앞서 언급 한 토론과 연결된 다른 형식을 고려하는 것이 좋습니다.

0

ivan_pozdeev 님의 의견에 따르면, 저는 제 답변을 올릴 것입니다. 나는 그것이 너무 추악한 해결책이라고 생각하기 때문에 이 아니라을 받아 들일 것입니다.

import pystache 
import copy 

tpl = "{{#fmt}}{{q}}{{/fmt}}" 

ctx = { 
    'q' : 1234.5678, 
} 

class OtherContext(object): 
    def __init__(self, renderer): 
     self.renderer = renderer 

    def fmt(self): 
     return lambda s: "%.2f" % float(copy.deepcopy(self.renderer).render(s, self.renderer.context)) 


renderer = pystache.Renderer(missing_tags='strict') 

ctx2 = OtherContext(renderer) 

print renderer.render(tpl, ctx, ctx2)