Переменная шаблона, ссылающаяся на пользовательский метод в моделях - PullRequest
0 голосов
/ 08 мая 2011

У меня есть шаблон index.html, который отображает список адресов электронной почты.У меня есть предварительно определенные авторизованные домены, и для всех этих авторизованных доменов адрес будет выделен жирным шрифтом.

Это мой шаблон -

{% for email in user_list %}

<p> 
{{email.email}} corresponds to this domain: 

    {% if email.valid_email %}
    <b>{{ email.email|domain}}</b>
    {% else %}
    {{ email.email|domain}}
    {% endif %}

</p>
{% endfor %}

Это то, что у меня есть в моих моделях -

class Table(models.Model):
    name = models.CharField(max_length=50)
    email = models.CharField(max_length=50)
    def valid_email(self):
        verified = ['yahoo.com','gmail.com']
        domain = self.email.split('@')[1]
        return domain in verified

Теперь это работает нормально, но моя проблема вкогда мне нужно будет обновить models.py и изменить проверенный список адресов электронной почты.Где было бы лучше разместить эту функцию valid_emails(), чтобы я мог легко ее обновить?И как тогда я буду ссылаться на функцию в шаблоне (если она отличается от текущей)?

1 Ответ

1 голос
/ 08 мая 2011

Вы можете определить этот список в вашем проекте settings.py файл:

VERIFIED_TABLE_EMAILS = ('yahoo.com','gmail.com', )

используя в модели:

from django.conf import settings

class Table(models.Model):
    name = models.CharField(max_length=50)
    email = models.CharField(max_length=50)
    def valid_email(self):
        domain = self.email.split('@')[1]
        return domain in settings.VERIFIED_TABLE_EMAILS

Таким образом, его легко обновить, и вы можете получить к нему доступ издругие места.

Если эта функция полезна только для модели Table, это правильное место (вы обращаетесь к полям модели).В противном случае вы можете написать custom filter, который проверяет любую строку по вашему списку адресов электронной почты.

filter:

def validate_email(value):
    domain = value.split('@')[1]
    return domain in settings.VERIFIED_TABLE_EMAILS

в шаблоне:

...
{{email.email}} corresponds to this domain: 
    {% if email|validate_email %}
    ...

Смотрите здесь длябольше информации о фильтрах: Пользовательские шаблоны тегов и фильтров

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...