2011-05-07 139 views
0

我有一個模板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

您可以在您的項目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來驗證您的電子郵件列表中的任何字符串。

過濾器:

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 %} 
    ... 

在這裏看到更多的信息過濾器上:Custom template tags and filters