0

いくつかのテンプレートがデータベースの「テーマ」の一部として保存されているプロジェクトに取り組んでいます。このため、Django の優れたテンプレート レンダリング機能の多くをすぐに活用することができません。例えば:

# Instead of this...
return render_to_response('path/to/template', arguments, context_instance=context)

# Have to do this...
template = Template(model.template_field)
context.update(arguments)
return HttpResponse(template.render(context))

これは問題ありませんが、私が遭遇した問題はサブテンプレートを含めることです。例えばmodel.template_fieldこんな感じだったら…

<html>
    <head>
        {% include head_extra %} <!-- Another DB field -->
    </head>
    <body>
        {% include body_extra %} <!-- Another DB field -->
    </body>
 </html>

...すると、Django はテンプレートが存在しないと文句を言います (その名前のテンプレートがないため)。

動的に作成されたテンプレートにサブテンプレートを含めるにはどうすればよいですか?

編集 (データベースの制約を無視し、詳細を提供します):
ファイルのアップロードまたはエディターを使用して、ユーザーが独自のテンプレートを定義できるようにしたいと考えています。

経由でサブテンプレートをインクルードできるようにし{% include %}たいのですが、ユーザーがどこからインクルードしているのか心配する必要はありません。したがって、次のように含めてほしいだけです: {% include extra_head %}. ただし、django は、テンプレートをロードするために、テンプレートがどこにあるかを確実に知る必要があります。

django でユーザー定義のテンプレートが必要な場合、人々は通常何をしますか?

4

1 に答える 1

1

ステートメントが必要であるという要件を放棄しても構わないと思っている場合は{% include %}、このようなことを自分の見解で試してみると、手作業で行うことができます...

def view(request, id):
    theme = get_object_or_404(Theme, pk=id)
    original_context = RequestContext(request)

    page_context = Context({
        'db_head': Template(theme.head_template).render(original_context),
        'db_body': Template(theme.body_template).render(original_context)
    }

    page = Template(theme.page_template)
    return HttpResponse(page.render(page_context))

...次のような「テンプレート」を使用します。

<html>
    <head>
        {{ db_head }}
    </head>
    <body>
        {{ db_body }}
    </body>
</html>

このパターンは、最下位レベルのテンプレートを最初に作成する場合と同様に、より深くネストされた要素に対しても機能します。を介して既存のテンプレートを含めることができrender_to_stringますが、ループ コンテキスト内に何かを含めたい場合は、依然として問題が発生する可能性があります。

少しぎこちなく、まさにあなたが探しているものではありませんが、うまくいきます。

于 2012-11-15T20:08:44.473 に答える