2010-01-18 12 views
1

데코레이터가이 작업을 수행하는 가장 좋은 방법인지 잘 모르겠습니다 만 컨텍스트 프로세서 사용에 대한 아이디어가 삭제되었지만 미들웨어는 내가 원하는 것이다.Django + 데코레이터 : 기준에 따라 템플릿에 컨텍스트 추가

내 상황은 다음과 같습니다. 우리는 매일 판매 및 기타 데이터를 처리합니다. 매월 다른 비즈니스와 마찬가지로 월을 마감합니다. 우리는 이것을 종이로하고 있지만, 우리 시스템에도 같은 것을 적용하고 싶습니다. 따라서 기본적으로 데이터가 닫힌 날짜 내에있는 경우 은 읽기 전용으로 설정하십시오.

처리/백엔드 측면에서이 작업을 수행하는 방법을 쉽게 알았지 만, 내보기 기능을 편집하지 않고 템플릿에 이러한 컨텍스트를 전달하는 방법은 무엇입니까? 단순히 전달되는 인스턴스의 날짜를 테스트하고 템플릿에 컨텍스트를 추가하는 데 필요한 장식자를 전달하여 작은 메시지를 표시하여 사용자가 "저장"단추가 비어 있음을 알릴 수 있습니다.

제 질문에 도움이 되었기를 바랍니다. 미리 감사드립니다.

답변

4

맞춤 템플릿 태그를 사용합니다. 그것은 매우 쉽게이 상황에 다른 유형의 데이터를 삽입 동일하게 작동

{% load business_tags %} 

{% business_check for someVar as myMessage %} 
{{myMessage}} 

템플릿에 컨텍스트 변수 다음

#yourapp/templatetags/business_tags.py 

from django import template 
register = template.Library() 

class BusinessNode(template.Node): 
    def __init__(self, instance, varName): 
    self.instance, self.varName=instance, varName 

    def render(self, context): 
    instance=template.Variable(self.instance).render(context) 
    if instance.passes_some_test(): 
     context[self.varName]='Some message' 
    else: 
     context[self.varName]="Some other message" 
    return '' 
@register.tag 
def business_check(parser, token): 
    bits=token.split_contents() 
    if len(bits)==5: 
    return BusinessNode(bits[2],bits[4]) 
    return '' 

을 설정할 수 있습니다.

+0

나는 맞춤 템플릿 태그를 생각하지 못했다고 생각하지 않는다. 한숨 :) 도움과 예제를 가져 주셔서 감사합니다! – Bartek

관련 문제