模板变量引用模型中的自定义方法

时间:2011-05-07 23:49:04

标签: django

我有一个模板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 个答案:

答案 0 :(得分: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