什么是Pythonic / Django-y存储长字符串资产的方式最多?

时间:2012-09-12 19:00:18

标签: python django string django-templates

我的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或纯文本。字典最终被迭代,另一个字符串中每个键的所有实例都被其字符串值替换。

3 个答案:

答案 0 :(得分:2)

我会把它视为类似于许多i8n编译代码的方式。

将长字符串存储在单独文件中的字典中。导入该字典,然后在代码中格式化所需的字符串。

答案 1 :(得分:0)

您可以将字符串放在像longstrings.py

这样的模块中
STRING1 = ("Bla bla"
     " more text"
     " even more text")

STRING2 = ("Bla bla"
     " more text"
     " even more text")

然后

from  longstrings import *

def my_strings(foo, bar, baz):
    return = {
        'string1': STRING1 % foo,
        'string2': STRING2 % (foo, bar),
        'string3': STRING2 % (foo, bar, baz),
    }

答案 2 :(得分:0)

您还可以为长字符串创建一个类,它们将存储在数据库中。这将允许您访问它们并将其修改为任何其他对象。例如,如果要修改特定字符串,可以使用Django管理工具。