【发布时间】:2012-09-12 19:00:18
【问题描述】:
我的 Django 应用程序中有一个函数,该函数有一个包含多个长字符串的字典。当调用该函数时,这些字符串会被格式化并返回字典。
例如:
def my_strings(foo, bar, baz):
return = {
'string1': 'a really long string! %s' % foo,
'string2': 'another long one. %s %s' % (foo, bar),
'string3': 'yet another! %s %s %s' % (foo, bar, baz),
}
但是,将所有这些长字符串存储在 Python 文件中很丑陋,似乎应该有一种更简洁的方法来做到这一点。
我曾尝试将它们放入模板文件并进行一些渲染,如下所示:
mytemplate.txt
{% if string1 %}
a really long string! {{ foo }}
{% endif %}
{% if string2 %}
another long one. {{ foo }} {{ bar }}
{% endif %}
{% if string3 %}
yet another! {{ foo }} {{ bar }} {{ baz }}
{% endif %}
Python
def my_strings(foo, bar, baz):
arg_dict = {
'foo': foo,
'bar': bar,
'baz': baz,
}
my_strings = {}
string_names = ['string1', 'string2', 'string3']
for s in string_names:
arg_dict[s] = True
my_strings[s] = render_to_string('mytemplate.txt', arg_dict).strip()
del arg_dict[s]
return my_strings
但这似乎有点过于迂回,而且很可能性能较差。
在 Python 或 Django 中是否有首选方法来处理存储和格式化长字符串资产?
一些额外的上下文:字符串资产是 HTML 或纯文本。字典最终会被迭代,并且另一个字符串中每个键的所有实例都被替换为其字符串值。
【问题讨论】:
-
旁白:您可以使用字典替换:
"word is %(x)s"%{"x": "this"} -
hayden:我确实使用
%(x)s格式。我只是为了问这个问题而简化了它。 :) -
这看起来不是更好的方法,但无论如何它是一种方法...您可以pickle 生成的字典并将其存储在文件中、缓存中或数据库中。使用字典替换是这种方法的最佳方法。但正如我所说,这是其中一种方法。
标签: python django string django-templates