2013-03-14 4 views
3

병 SimpleTemplate을 쓰고 있는데 날짜를 비교하고 싶습니다. 어떻게 (그리고 어디서) 템플릿 안에 파이썬 패키지를 가져 오나요? 가능한가?병 템플릿 : 파이썬 패키지를 가져 오는 방법

다음은 내가하려는 일의 예입니다. 내가 오늘 날짜로 날짜를 나타내는 데이터 (문자열) 비교하려면 :

%if datetime.strptime(report['date'], '%m/%d/%Y') < datetime.today(): 
    <span class="ui-icon ui-icon-circle-close"></span> 
%elif report['result']: 
    <span class="ui-icon ui-icon-circle-check"></span> 
%elif not report['result']: 
     <span class="ui-icon ui-icon-alert"></span> 
%end 

정상적인 파이썬 프로그램에서 그 일을하기를, 나는

from datetime import datetime 

말할 필요하지만 거기입니다 것 템플릿에서 그렇게하는 방법은?

답변

0

아니요, 불가능합니다. 템플릿은 복잡한 논리를 포함하지 않으며 프레젠테이션 계층의 일부입니다. 뷰에서 모든 데이터를 준비하고 이미 처리 된 템플리트로 전달해야합니다.

그래서 귀하의 경우에 당신은 아마보기로 논리를 이동해야 - 결과 뭔가 그 라인을 따라 :

from datetime import datetime 
if datetime.strptime(report['date'], '%m/%d/%Y') > datetime.today(): 
    report["status"] = "due" 
else: 
    if report["result"]: 
     report["status"] = "pending_check" 
    else: 
     report["status"] = "missing_result" 

다음 템플릿에 플래그를 확인,과 같이 :

%if report["status"] == "due": 
    <span class="ui-icon ui-icon-circle-close"></span> 
%elif report["status"] == "pending_check": 
    <span class="ui-icon ui-icon-circle-check"></span> 
%elif report["status"] == "missing_result": 
     <span class="ui-icon ui-icon-alert"></span> 
%end 

close, checkalertreport["status"] 값으로 사용하지 않았습니다. 이는 데이터를 프리젠 테이션에서 분리하여보기에서 데이터를 분리하는 것이므로 bu 첨부 된 스 니펫 에서처럼 템플릿의 처리 된 데이터에 작용하지 않습니다.

아이콘을 변경하기로 결정한 경우보기에서 프리젠 테이션을 변경하는 것보다 우수합니다 (예 : 웹 서버를 다시 시작해야만 적용됨).

UPDATE (4 월 (2016)) : 는 분명히 지금 가능 또는 내가 병 템플릿에서 모듈을 가져올 대답 때문에 가능하게되었다,하지만 여전히 나쁜 생각 :

+0

매우 감사합니다. 나는 정말로 더 잘 알려야 했었지만 DB에서 데이터가 어떻게 존재하는지 생각하고 있었고 뷰에서 그것을 어떻게 조작 할 수 있는지 고려하지 않았습니다. – Tim

+0

물론, 오신 것을 환영합니다. 그리고 걱정하지 마세요, 때로는 가장 단순한 것을 알아내는 것이 가장 힘듭니다 ... :) – kgr

0

난 그냥 시도입니다 :

%from mymodule import * 

그리고 더 이상 확인할 시간이없는 것 같아요. 가져 오기가 파이썬 메서드를 호출하는 것 같아서 therfore가 작동해야합니다.

2

예, 템플릿 내부에서 모듈 가져 오기 입니다. 예를 들어 bottlepy 자체가 오류 페이지를 생성하는 데 사용됩니다.

ERROR_PAGE_TEMPLATE = """ 
%%try: 
    %%from %s import DEBUG, HTTP_CODES, request, touni 
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
    <html> 
     <head> 
      <title>Error: {{e.status}}</title> 
... 
관련 문제