2012-02-12 40 views
1

在我的項目中,我需要根據多個參數對待CSS要求。因此,與可用的靜態管理系統相比,我需要額外的抽象級別。如何創建一個在塊外工作的定製Django模板標籤?

在我的模板中,我希望能夠註冊CSS(和JS)的要求與模板標籤看起來像{% register_css 'myfile.css' %}。這種方法就像一個魅力。

但是,這種方法仍然存在一個問題:標籤在插入塊時完美工作,但插入子模板之後永遠不會調用。標籤的定義是:

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

這是我的測試模板:

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

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

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

在該模板中,「家」的CSS被註冊,但不是「基地」之一。我怎樣才能使這兩個工作?

謝謝!

回答

3

包括在你的基本模板空{% block init %},然後覆蓋在子模板塊寄存器文件 - {% block init %}{{ block.super }} {% register_css 'foo %}{% endblock %}

根本的問題是,在一個孩子的模板,只有在父模板匹配的東西,塊將得到渲染。 AFAIK有沒有簡單的方法,但使用虛擬塊工作得很好。

+0

不是最令人興奮的方式來做到這一點......但它的工作原理。謝謝。 – Pierre 2012-02-13 13:24:47

相關問題