【问题标题】:Change rendering of a particular CharField in Django在 Django 中更改特定 CharField 的呈现
【发布时间】:2018-04-14 01:07:11
【问题描述】:

我有一个模特BankAccountBankAccount 模型包含 CharField IBAN 这是一个国际银行帐号。我在多个模板中使用{{ bank_account.IBAN }}。它存储为没有空格的字符串,但我想更改它的模板渲染,以便每 4 个字符后跟零。

SK121234123412341234 将呈现为SK12 1234 1234 1234 1234

我可能会创建一些 TemplateTagTemplateFilter 但我很好奇是否有办法在 BankAccount 模型中更改它。例如,创建我自己的IBANField(覆盖CharField),这样我就不必用tagsfilters 包围IBAN 变量。

class BankAccount(models.Model):
    IBAN = models.CharField(max_length=40, ... )
    ...

这里没有找到渲染方法:https://docs.djangoproject.com/en/1.11/howto/custom-model-fields/

【问题讨论】:

  • 渲染是什么意思?你的意思是保存后?实时渲染的东西?
  • 我的意思是 {{ IBAN }} var 在 HTML 中的样子。

标签: python django python-2.7 django-models


【解决方案1】:

您可以创建一个自定义字段,但最简单的方法就是编写一个以正确格式显示值的方法。比如:

class BankAccount(models.Model):
    ..
    def display_iban(self):
        return ''.join(l + ' ' if (i+1) % 4 == 0 else l for i, l in enumerate(self.IBAN))

现在您可以在模板中执行{{ bank_account.display_iban }}

【讨论】:

  • 谢谢,这是个好主意,但自定义字段中的哪个方法负责 HTML 中的值的外观?
  • 很抱歉,如果这是题外话,但在这种情况下,您如何决定使用方法和属性?
  • @souldeux 模板自动调用方法,所以这里没有区别。
  • @MilanoSlesarik 它并没有像那样工作。模板只显示它们给出的值;要自定义字段的表示,您必须更改从数据库加载它的方式,可能是通过from_db_field or to_python methods
  • @DanielRoseman 我明白了,我认为有某种 render_field 函数或类似的东西。谢谢,我会用你的方法。
猜你喜欢
  • 2011-10-17
  • 2011-05-03
  • 2012-01-26
  • 2011-07-26
  • 2012-05-12
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
相关资源
最近更新 更多