Django模板块从模板标签模板中

时间:2018-05-11 13:55:41

标签: django django-templates

我有一个名为base.html的模板。这个模板在加载jQuery后底部包含一个名为pagescripts的块,如下所示:

<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中,我想从base.html向pagescripts块添加一个脚本。所以,在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>

但是这会导致long_article_card.html中的javascript在long_article_card.html的末尾呈现,这意味着它会在页面底部加载jQuery之前呈现,因此脚本不起作用,因为$尚未定义。我需要做的是将long_article_card.html的块pagescripts呈现在页面的最底部,主要是在base.html的底部。我需要django从long_article_card.html获取块pagescripts,将其传递给article / detail.html,然后将article / detail.html传递给base.html,然后base.html将其包含在其pagescripts块中在加载jQuery之后,它位于base.html的最底层。

我无法通过long_article_card.html扩展文章/ detail.html,因为它会导致递归错误。有没有办法让long_article_card.html将内容添加到base.html的pagescripts块?

谢谢。

1 个答案:

答案 0 :(得分:0)

django-sekizai是为此用例而构建的。它可能对您有用