【发布时间】: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一无所知。