【问题标题】:django template, String managementdjango模板,字符串管理
【发布时间】:2017-07-17 17:03:51
【问题描述】:

我有几个模板多次使用有限数量的字符串,所以我正在考虑以某种方式重用字符串,而不是在模板中进行硬编码。

我找到了两种方法,但它们都有限制,所以我要求更好的方法来做到这一点,或者可能是在 Django 模板中管理字符串的标准方法。

首先很简单:将它们存储在数据库中,如果我在下面创建一个简单的模型并将它们全部发送到视图中(大约 500 个对象),对于所有渲染的模板来说效果很好。此外,我可以对它们进行分类,并在每个模板中发送相关的类别。

class Subject(models.Model):
    key = models.CharField()    
    trans = models.TextField()
    type = models.SmallIntegerField(choices=string.types)

优点:

  • 简单
  • 即使是具有管理员权限的用户也可以管理它们,我无需更改简单文本
  • 可以存储翻译(以备将来使用,如果需要更多语言)

缺点:

  • 增加数据库访问权限
  • 害怕未知的安全问题

第二:使用{% with x="done" %}标签我可以在基本模板中使用“with”标签,并在其他模板中扩展它,所以我可以使用标准django访问所有标签。

优点:

  • 简单
  • 没有数据库访问权限
  • 可能安全

缺点:

  • 带有标签的所有内容都需要在一行中输入,那么它很有用 最多10-20个条目,远300-500个条目
  • 在 html 中管理
  • 硬编码

编辑:第三,使用Django translation

感谢@Danial Roseman 的评论,我可以使用 i18n。

优点:

  • 迄今为止最标准的方式

缺点:

  • 管理硬编码字符串很复杂 :)
  • 开销(根据 i18n 文档)

【问题讨论】:

  • 想到的一种可能性是使用translation 支持;您可以将所有字符串存储在消息文件中,并在模板中通过短名称引用它。
  • @Prakhar 请不要向我发送垃圾邮件。无论如何,我对scrapy一无所知。

标签: django django-templates


【解决方案1】:

您也可以将字符串存储在使用上下文处理器传递到上下文的字典(我们称之为“字符串”)中,然后使用标准的{{ strings.key }} 表示法。没有安全问题,不需要数据库,不需要特殊管理,如果需要,您也可以将字符串标记为可翻译。

【讨论】:

  • 看起来不错,让我试一试,我会尽快提供反馈
猜你喜欢
  • 1970-01-01
  • 2023-03-23
  • 2011-03-12
  • 2012-06-06
  • 2017-08-17
  • 2013-01-23
  • 2017-04-10
  • 2016-01-03
  • 2015-03-02
相关资源
最近更新 更多