2011-05-07 100 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