我有一个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的更多经验。
克里斯
答案 0 :(得分:0)
根据django docs.使用模板继承请注意,这些都是非常通用的示例,它应该足以让您继续。请务必查看我上面链接的文档。
# 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
{% extends 'base_page.html' %}
{% block css_block %}
<link rel="stylesheet" href="gallery.css"/>
{% endblock %}
{% block js_block %}
<script src="gallery.js"></script>
{% endblock %}
{% 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')