2014-02-11 2 views
3

У меня есть приложение 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 Docs:

Иногда вы можете отключить эту функцию и по другим причинам, и сказать шаблонную систему, чтобы оставить переменную ип-не названный ни на что. Для этого установите атрибут do_not_call_in_templates для вызываемого со значением True. Затем система шаблонов будет действовать так, как если бы ваша переменная не вызывалась (позволяя, например, получить доступ к атрибутам вызываемого).

Чтобы сделать это изменить функцию, чтобы иметь набор 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

Awesome, спасибо за ссылку! 'do_not_call_in_templates' был добавлен в Django 1.4, и я все еще придерживался 1.3, но похоже, что установка' alters_data' в True выполняет ту же цель. –

Смежные вопросы