2014-02-11 62 views
3

我有一個Django應用程序,它看起來是這樣的:Django的:防止模板使用的模型方法

class Server(models.Model): 
    hostname = models.CharField(max_length=100) 
    # this field stores encrypted credentials 
    admin_credentials = models.TextField() 

    def get_admin_credentials(self): 
     return decrypt(self.admin_credentials) 

由於Django的模板語言允許模板調用它們的上下文的方法(不需要參數)變量,它似乎太容易了一個模板,只是包含以下代碼泄漏這些憑據:

{{ server.get_admin_credentials }} 

我如何防止直接使用get_admin_credentials()方法模板?

回答

4

這在模板API文檔指出:

有時候,你可能要關閉此功能出於其他原因,並告訴模板系統留下一個變量未叫不管。爲此,請在值爲True的可調用對象上設置do_not_call_in_templates屬性。然後,模板系統將像您的變量不可調用一樣工作(例如,允許您訪問可調用的屬性)。

爲此更改功能有do_not_call_in_templates標誌設置:

def get_admin_credentials(self): 
    return decrypt(self.admin_credentials) 
get_admin_credentials.do_not_call_in_templates = True 
+0

真棒,感謝您的參考! 'do_not_call_in_templates'是在Django 1.4中添加的,我仍然堅持1.3,但它看起來像將alters_data設置爲True可以實現相同的目標。 –