2010-01-18 79 views
1

我不確定裝飾器是否是最好的方法來做到這一點,但我已經刪除了使用上下文處理器的想法,而且我不確定是否中間件是我想要的。Django +裝飾器:根據條件向模板添加上下文

我的情況如下:我們每天處理銷售和其他數據。每個月,我們都像其他業務一樣關閉這個月。我們在紙上這樣做,但我想將相同的東西應用於我們的系統。因此,基本上,如果數據在關閉的日期之內,則使其數據爲只讀

我很容易地找到了如何做到這一點的處理/後端的一面,但我怎麼會通過這樣的背景下,以一個模板,而無需編輯一噸我的觀點功能是什麼?我只是想將一個裝飾器傳遞給我的函數,它將測試正在傳遞的實例的日期,並向模板添加一些上下文,以便我可以顯示一條消息,讓用戶知道爲什麼「保存」按鈕被清空。

我希望我的問題有道理。提前致謝。

回答

4

我會使用自定義模板標記。這使得它很容易設置的環境變量

#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 '' 

然後在你的模板

{% load business_tags %} 

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

這同樣適用於將其他類型數據轉換的背景下。

+0

我不敢相信我沒有想到自定義模板標籤。感嘆:)感謝您的幫助和示例! – Bartek 2010-01-18 22:30:04