包含模板标记中的css和/或脚本

时间:2015-10-23 11:45:14

标签: javascript css django django-templates

我有一个Django应用程序,它使用模板标签来处理wordpress样式的短代码。我的代码基于https://github.com/emilbjorklund/django-template-shortcodes/blob/master/shortcodes,但我添加了自己的解析器。短代码基本上是图像相册,例如[album view = slideshow id = 1],其中视图可以是幻灯片(Bootstrap Carousel)或Gallery(Lightbox)。我的解析器看起来像:

def parse(tag_atts, tag_contents=None):
    #Check our id is a digit.
    tag_atts['content'] = "Album Short Tag Error"
    if tag_atts['id'].isdigit:
        #try:

        # Get the data from the album
        album = Album.objects.get(pk = tag_atts['id'] )#.select_related()
        images = Image.objects.filter(album__id=album.id)

        if tag_atts['view']=='gallery':
            return makeGallery(album,images,tag_atts)
        elif tag_atts['view']=='slideshow':
            return makeSlideshow(album,images,tag_atts)
        else:
            context = Context(tag_atts)
            t = Template("""{{ content }}""")
            return t.render(context)

makeGallery和makeSlideshow函数只处理短代码及其属性,返回一个渲染模板,其中包含所有必需的HTML,如给定的else子句,但复杂度更高(请参阅github解析器示例)。

一切正常但我需要在实例中包含一个自定义css文件和javascript文件,该文件是已请求的图库视图。目前,它使用自定义块包含在主页面模板文件中,但这意味着它始终存在,无论短代码是存在还是已请求库。

只有在需要时,告诉Django在模板标签内包含这些附加文件的适当方法是什么?

我厌恶添加一个额外的'checker'标记,用于解析customcss标题块中的页面内容,以查看是否包含它,并再次为页脚中的关税块提供。

我期待听到Djangooists的更多经验。

克里斯

1 个答案:

答案 0 :(得分:0)

根据django docs.使用模板继承请注意,这些都是非常通用的示例,它应该足以让您继续。请务必查看我上面链接的文档。

base_page.html

# pretend your standard html opening stuff is here.

# Put your base css file(s) here. Things you want for every page.
{% block css_block %}
# Leave this empty for now.
{% endblock %}

{% block body %}
# If all your pages have the same base layout, put it here.
{% endblock %}

# Put all javascript files here that are needed on all pages.
{% block js_block %}
# Leave this empty for now.
{% endblock %}

#pretend your ending html is here

gallery_template.html

{% extends 'base_page.html' %}

{% block css_block %}
<link rel="stylesheet" href="gallery.css"/>
{% endblock %}

{% block js_block %}
<script src="gallery.js"></script>
{% endblock %}

slideshow_template.html

{% extends 'base_page.html' %}

{% block css_block %}
<link rel="stylesheet" href="slideshow.css"/>
{% endblock %}

{% block js_block %}
<script src="slideshow.js"></script>
{% endblock %}

您的视图功能

#camelcase is fine, consistency is important though. 
def make_gallery(album,images,tag_atts) 
    #do things here
    return render_to_response('path/to/gallery_template.html')

def make_slideshow(album,images,tag_atts)
    #do things here
    return render_to_response('path/to/slideshow_template.html')