1

私は Flask を使用して、職場で内部アプリ用の Web サービスを作成しています。Web サービス URI の多くは HTML パーシャルを返します。HTML テンプレート文字列をきれいに格納する方法を見つけようとしています。テンプレート文字列を別々のファイルに入れたくありません。通常、それらは数行の長さしかなく、それぞれに 3 行が含まれる 20 個のテンプレート ファイルを持ちたくないからです。関数の docstring で関数の html テンプレート文字列を定義することを考えていました。それは複数の目的に役立つと思うからです。基本的に「これは私が出力したものです」と言って、ドキュメントとして機能し、3行のテンプレート文字列を別のファイルに保存する必要がないようにします. これが私が話していることです:

@app.route('/path/to/my/resource/<int:_id>')
def some_resource(_id):
    """
    <select id="resource-{{ resource.id }}" class="resource">
        {% for choice in choices %}
        <option id="choice-{{ choice.id }}" value="{{ choice.id }}">
            {{ choice.text }}
        </option>
        {% endfor %}
    </select>
    """

    # retrieving resource, etc...

    return render_template_string(some_resource.__doc__, **kwargs)

これが維持するのが悪夢になるかどうかはわかりません...何か考えはありますか?

4

3 に答える 3

3

悪い計画だと思います。

ドキュメントストリングはドキュメント用であり、テンプレートはドキュメントではありません。ドキュメントは、関数が何のために使用されているかを説明することになっています。HTML テンプレートは、その代用にはなりません。

複数行の文字列を使用してテンプレートを保持できますが、これはおそらく良い考えです。それらをdocstringにしても何も得られません。

于 2011-03-11T22:11:04.360 に答える
0

一部のテンプレート エンジンでは、オブジェクトに__html__メソッドがある場合、その出力は安全な (エスケープされた) 文字列として扱われます。

def fn(x):
    bla = x
fn.__html__ = lambda : '''
    <h1>Headline</h1>
    <p>lorem ipsum</p>
    '''
于 2011-03-11T22:35:23.950 に答える
0

これは確かに興味深いアイデアであり、doctest の例に従って、テキストだけでなく機能的に有用なものを docstring に入れることはまったく前例のないことではありません。明らかな欠点は、docstring にドキュメントがないことです。help()現在、メソッドがプログラマーがドキュメントを介して(またはドキュメント文字列を使用して自動生成されたドキュメントによって)必要とする可能性が高いものでない場合、これは大きな問題になる場合とそうでない場合があります。

ただし、次のいずれかではないのはなぜですか。

  1. ローカル文字列変数を使用するだけです__doc__-欠点は、関数のスコープ外からそれを取得できないことです
  2. render_template_stringそれが一度だけ使用された場合は、呼び出しに入れるだけです-#1と同じ欠点ですが、複数回使用された場合も当てはまりません
  3. この文字列を引数として受け取る別のデコレータを作成します。特に、一度だけ使用し、最後に常に同じ呼び出しを行っている上記のパターンに従う場合、これにより、それを引き出すことができますその方法
于 2011-03-11T22:12:15.087 に答える