Могу ли я переопределить блоки в родительском шаблоне из тегов-шаблонов Django? - PullRequest
0 голосов
/ 18 октября 2011

Я пишу пакет тегов-шаблонов для Django, чтобы облегчить включение графов RGraph в приложения Django.

У меня возникли некоторые проблемы с шаблоном, включающим JavaScript, у меня есть блок, определенный вмой базовый html-файл, который я хотел бы предоставить для шаблона тега.

Это мой шаблон верхнего уровня

{% 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>

При такой настройке, когда шаблон в новом теге переопределяет блок, определенный в шаблоне верхнего уровня, могу ли я иметь возможность, чтобы скрипты появлялись в теге верхнего заголовка?

1 Ответ

1 голос
/ 19 октября 2011

Аконсу прав, у вас неправильное понимание тегов шаблонов django, они не могут перекрывать другие блоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...