2012-02-12 8 views
1

私のプロジェクトでは、いくつかのパラメータに応じてCSS要件を別々に扱う必要があります。したがって、私は、利用可能な静的管理システムと比べて、抽象レベルを追加する必要があります。ブロック外で動作するカスタムDjangoテンプレートタグを作成するには?

私のテンプレートでは、CSS(およびJS)要件を{% register_css 'myfile.css' %}のようなテンプレートタグに登録できるようにしたいと考えています。このアプローチは魅力のように機能します。

しかし、このアプローチにはまだ1つの問題があります。タグはブロックに挿入すると完全に機能しますが、子テンプレートの上に挿入したときには呼び出されません。タグの定義は次のとおりです、「ホーム」CSSが登録されることをテンプレートに

{% extends main_skelton %} 
{% load static_registry %} 
{% register_css 'base' %} 

{% block title %}Welcome{% endblock %} 

{% block content %} 
{% register_css 'home' %} 
<p>Some content here</p> 
{% endblock %} 

ではなく、「ベース」1:

@register.simple_tag(takes_context = True) 
def register_css(context, *args): 
    context['static_registry'].register_css(streamlet) 
    return '' 

これは私のテストテンプレートです。私はどうすれば両方の仕事をすることができますか?

ありがとうございます!

答えて

3

は、ファイルを登録するには、子テンプレートでそのブロックを上書きした後、あなたのベーステンプレートに空{% block init %}を含める - {% block init %}{{ block.super }} {% register_css 'foo %}{% endblock %}

根本的な問題があることは、子テンプレートで親テンプレートの意志で何かに一致する唯一のブロックですレンダリングされる。 AFAIKの周りに簡単な方法はありませんが、ダミーブロックを使用するだけで正常に動作します。

+0

実際にそれを行う最もエキサイティングな方法ではありません...しかし、それは動作します。ありがとう。 – Pierre

関連する問題