1

プロジェクトにDjangoコメントフレームワークを含め、カスタムテンプレートを追加して、デフォルトのテンプレートの代わりにベーステンプレートを含めました。

ただし、私のベーステンプレートには、動的パラメーターを持つURLテンプレートタグがいくつかあります。

{% url galleries blog.pk blog.slug %}

可変ブログは私のビューのコンテキストに含まれていますが、コメントフレームワークには含まれていません。これにより、コメントを追加しようとしたときに逆一致エラーが発生しません。

可変ブログを常にベーステンプレートに含めるための最良の方法は何でしょうか?

アップデート:

ブログアプリのURLパターン:

url(r'^(?P<blog_id>\d+)/(?P<slug>[\-\d\w]+)/galleries/$', 'galleries', name = 'galleries'),
(r'^comments/', include('django.contrib.comments.urls')),
4

1 に答える 1

2

自分でコンテキストプロセッサを作成します。dictこれらは、テンプレート内のどこからでも使用できるアイテムを返す関数にすぎません。通常context_processor.py、関連するDjangoアプリでファイルを作成し、これをTEMPLATE_CONTEXT_PROCESSORS設定に含めます。

例えば:

project / myapp / context_processors.py:

def blog(request):
    return {
        'blog': get_blog(),
    }

設定:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ... standard django ones here ...
    'project.myapp.context_processors.blog',
)

blogこれで、すべてのテンプレートで使用できるようになります。

request編集:これらのコンテキストプロセッサメソッドが、より強力なことを実行できるようにする引数としてを受け取ることを忘れました。

編集2:URLパターンを示す更新ごとに... blog_idkwargsからピックオフするミドルウェアを作成し、それをリクエストオブジェクトに追加できます。

class BlogMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
         blog_id = view_kwargs.pop('blog_id', None)
         if blog_id:
             request.blog = Blog.objects.get(id=blog_id)

これで、いずれかを使用してテンプレート内のブログにアクセスできます{{ request.blog }}。または、コンテキストプロセッサを引き続き使用することもできます。

于 2012-06-13T13:57:05.320 に答える