Шаблонный блок Django из шаблона тега шаблона - PullRequest
0 голосов
/ 11 мая 2018

У меня есть шаблон с именем base.html.Этот шаблон содержит блок с именем pagecripts внизу после загрузки jQuery, например:

<div class="container-fluid">  
{% block content %}
{% endblock %}
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
<script defer src="https://use.fontawesome.com/releases/v5.0.10/js/all.js" integrity="sha384-slN8GvtUJGnv6ca26v8EzVaR9DC58QEwsIk9q1QXdCU8Yu8ck/tL/5szYlBbqmS+" crossorigin="anonymous"></script>
{% block pagescripts %}
{% endblock %}

Далее у меня есть тег шаблона, который является тегом включения для отображения необычно выглядящей карты boostrap 4 дляконкретная новостная статья, например:

@register.inclusion_tag('long_article_card.html', takes_context=True)
def show_long_card(context, article):
try:
    contextForm = context['form']
except KeyError:
    contextForm = None

return {'article':article, 'form': contextForm}

Теперь, внутри этого long_article_card.html, я хочу добавить скрипт в блок pagescripts из base.html.Итак, в long_article_card.html у меня есть это:

<div class="target">TARGET HERE</div>
<a class="dropdown-item" id="lean-vote-xl" href="#">Extreme Left</a>
{% block pagescripts %}
<script>
$(document).ready(function(){
$("#lean-vote-xl").on('click', function(){
    $.ajax({
        url:'/webproxy/v/?i=a&pk={{article.id}}&t=1&v=3',
        type:'get',
        dataType:'html',
        crossDomain:true,
        success:function(data)
       {
       var outputCard = "<div class=\"target\"><br><h2>That worked</h2></div>";
        $(".target").html(outputCard);
       },
        error: function(data) {
            var outputCard = "<div class=\"target\"><br><h2>Load Error</h2></div>";
            $(".target").html(outputCard);
        }
    });
}); // end id_url_text    
});
</script>
{% endblock %}

Этот шаблонный тег затем вызывается из подробного шаблона статьи под названием article / detail.html, который расширяет base.html.

{% extends 'base/base.html' %}
<div class="row">
{% show_long_card article %}
</div>

Но это приводит к тому, что javascript в long_article_card.html рендерится в конце long_article_card.html, что означает, что он рендерится до загрузки jQuery в нижней части страницы, поэтому скрипт не 'не работает, потому что $ еще не определено.Что мне нужно сделать, так это чтобы блочные скрипты страниц из long_article_card.html были отображены в самом низу страницы, по сути, внизу base.html.Мне нужно django, чтобы взять блок pagecripts из long_article_card.html, передать его в article / detail.html, а затем article / detail.html, чтобы передать его в base.html, а затем base.html включит его в свой блок pagecripts, которыйнаходится в самом низу base.html после загрузки jQuery.

Я не могу позволить long_article_card.html расширить статью / detail.html, потому что это вызывает ошибку рекурсии.Есть ли способ, чтобы long_article_card.html добавить что-то в блок basecripts страниц?

Спасибо.

1 Ответ

0 голосов
/ 11 мая 2018

django-sekizai был создан для этого варианта использования.Это может быть полезно для вас

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