【问题标题】:What's the most Pythonic/Django-y way to store long string assets?存储长字符串资产的最 Pythonic/Django-y 方式是什么?
【发布时间】: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


【解决方案1】:

我会将其视为类似于许多 i8n 编译代码的处理方式。

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

【讨论】:

  • 好电话。我没有想到这与 i8n 代码的工作方式有多么相似,但这几乎是正确的。
【解决方案2】:

您可以将字符串放在 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),
    }

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 2019-10-05
      • 2010-12-17
      • 2011-08-28
      • 2010-09-05
      • 2023-03-05
      相关资源
      最近更新 更多