我有一个模板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()
功能,这样我可以轻松更新它?然后我将如何引用模板中的函数(如果与当前不同)?
答案 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