2

一般的なビューの urls.py にコードがあります。

infodict = {
'queryset': Post.objects.all(),
'date_field': 'date',
'template_name': 'index.html',
'template_object_name': 'latest_post_list',
}

urlpatterns += patterns('django.views.generic.date_based',
(r'^gindex/$', 'archive_index', infodict),
)

したがって、アドレス /gindex/ に移動すると、'index.html' のテンプレートを使用した汎用ビューが使用されます。

しかし、この urlpattern にはより一般的なビューがあるため、同じ infodict を使用して別のテンプレート名を指定するにはどうすればよいでしょうか? 多くの infodict を使用する必要がなく、デフォルトのテンプレート名を使用できません。

これは、infodict 内のテンプレート オブジェクト名にも適用されることに注意してください。

ご協力いただきありがとうございます!

編集: これは、stackoverflow に関する私の最初の質問の 1 つであり、完全な回答に驚いています! 私は知らなかった dict コンストラクターを使用することを好みます。通常、探しているものが見つからないため、Python のドキュメントを使用するのは少し難しいと思います。

すべての回答とさまざまなアプローチに感謝します。

4

4 に答える 4

1

異なるビューに異なるテンプレート名を提供したい場合、実際に一般的な方法は、各 URL パターンに一意の辞書を渡すことです。例えば:

urlpatterns = patterns('',
    url(r'^home/$', 'my.views.home', {'template_name': 'home.html'}, name='home'),
    url(r'^about/$', 'my.views.about', {'template_name': 'about.html'}, name='about'),
)

この種のパターンは一般的であり、受け入れられます。

于 2009-03-24T15:15:01.010 に答える
0

それほど単純ではありませんが、同じビューに一致するさまざまなパターンが多数ある場合に役立つ可能性があります。

base_dict={
...
#defaults go here
}
def make_dict(template_name,template_object_name):
    base_dict.update({
        'template_name':template_name,
        'template_object_name':template_object_name,
    })
    return base_dict

urlpatterns += patterns('django.views.generic.date_based',
(r'^gindex/$', 'archive_index', make_dict('index1.html','latest_poll_list')),
(r'^hindex/$', 'archive_index', make_dict('index2.html','oldest_poll_list')),
)

多くの同様の一般的なビューでは、これによりコード呼び出しが少し圧縮されますが、透過性が少し犠牲になります。同じいくつかのパラメーターをカスタマイズする行が多数ある場合は、これが最も読みやすいかもしれません。

最後に、ビューのすべてまたはほとんどが同じ情報のすべてではなく一部を必要とする場合、コンテキスト プロセッサの有用性を決して忘れないでください。上記のソリューションよりもセットアップに少し手間がかかりますが、(RequestContext キーワードなしで render_to_response ショートカットを使用しない限り) テンプレートでデフォルトが常に使用可能であることが保証されるため、はるかに優れた拡張性があります。ビューまたは URL conf が変更されます。

于 2009-03-24T15:31:53.323 に答える