У меня есть шаблон с именем 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 страниц?
Спасибо.