2

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またはプレーンテキストのいずれかです。ディクショナリは最終的に繰り返され、さらに別の文字列内の各キーのすべてのインスタンスがその文字列値に置き換えられます。

4

3 に答える 3

2

私はこれを多くのi8nコンパイルコードが行うのと同じようなものとして扱います。

長い文字列を別のファイルの辞書に保存します。その辞書をインポートしてから、コードで目的の文字列をフォーマットします。

于 2012-09-12T19:56:30.420 に答える
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),
    }
于 2012-09-12T20:00:01.417 に答える
0

長い文字列のクラスを作成することもでき、それらはDBに保存されます。これにより、それらにアクセスして、他のオブジェクトと同じように変更できます。たとえば、特定の文字列を変更する場合は、Django管理ツールを使用できます。

于 2013-05-19T07:48:00.940 に答える