2011-10-18 68 views
0

我正在爲Django編寫一個templatetag軟件包,以便在Django應用程序中輕鬆包括RGraph圖。我可以用Django templatetags覆蓋父模板中的塊嗎?

我對包含javascript的模板有點麻煩,我在我的基本html文件中定義了一個塊,我想要templatetag的模板提供。

這是我的最高水平模板

{% load django_rgraph %} 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title>Test Charts</title> 
    {% block js %} 
    {% block js.custom %}{% endblock %} 
    {% endblock %} 
</head> 

<body> 

{% rgraph piechart %} 

</body> 
</html> 

,這是我的新標籤模板

{% extends "django_rgraph/rgraph_base.html" %} 

{% block rgraph_chart %} 
<script> 
window.onload = function() { 
    var {{ chart.name }} = new RGraph.Pie('{{ chart.name }}', [{% for value in chart.values %}{{ value }}{% if not forloop.last %},{% endif %}{% endfor %}]); 
    {% for option, value in chart.options.items %} 
    {{ chart.name }}.Set('{{ option }}', {{ value }}); 
    {% endfor %} 

    {% if chart.animate %} 
    RGraph.Effects.Pie.RoundRobin({{ chart.name }}); 
    {% else %} 
    {{ chart.name }}.Draw();  
    {% endif %} 
} 
</script> 
{% endblock %} 

和完整性,rgraph_base.html看起來像這樣

{% block js.custom %} 
{% for js in chart.js %} 
<script src="RGraph/js/{{ js }}"></script> 
{% endfor %} 
{% endblock %} 

{% block rgraph_chart %}Insert Chart Here{% endblock %} 

我希望這會創建一個html頁面,其中的JavaScript被包含在標題中,而是我牛逼出現在身上,這樣

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title>Test Charts</title> 
</head> 

<body> 

<!-- I was expecting these script tags to be below the title tag --> 
<script src="RGraph/js/RGraph.common.core.js"></script> 
<script src="RGraph/js/RGraph.common.tooltips.js"></script> 
<script src="RGraph/js/RGraph.common.effects.js"></script> 
<script src="RGraph/js/RGraph.pie.js"></script> 

<script> 
window.onload = function() { 
    var pie1 = new RGraph.Pie('pie1', [10,24,15,82]); 
    pie1.Set('chart.gutter.left', 30); 
    pie1.Draw(); 
} 
</script> 
</body> 
</html> 

在此設置下,在新標籤覆蓋在頂層模板中定義的塊模板,我應該能夠使腳本出現在頂部頭標記?

+0

該腳本出現在身體中,因爲rgraph標籤被插入身體。沒有? – akonsu

+0

@akonsu,這就是我要求的,在標籤的模板中有一個與父類中的某個相同名稱的塊,我期待着與普通模板相同的行爲,即,子塊中的塊會覆蓋塊中的塊父母。 –

+1

顯然,Django模板並不像這樣。此外,您所期望的行爲是否正確也值得懷疑。畢竟你只是將你的標籤插入身體。您不是從具有要填充的塊的頂級模板派生而來的。 – akonsu

回答

1

Akonsu是對的,你有一個django模板標籤的誤解,他們不能覆蓋其他塊。

相關問題