context的內容:
sub_dual = [{'start':1, 'end':2, 'text':'Hello'}, {'start':3, 'end':4, 'text':'bye'}]
想在模板裡面遞迴list裡的dict,然後生成下面的網頁原始碼:
<p><span class="youtube-marker" data-start=1 data-end=2>Hello</span></p>
<p><span class="youtube-marker" data-start=3 data-end=4>bye</span></p>
一般python要拿到某key的value可以用:
for d in sub_dual:
d.get(start)
Django的template及tags讓使用者得以在模板使用python語法,本篇文章分成幾個步驟:
#custom_tags.py
from django import template
register = template.Library()
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")]
,
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'libraries': { #新增此行
'custom_tags':'templatetags.custom_tags' #新增此行
} #新增此行
},
},
]
** 'templatetags.custom_tags'指得是先前建立的資料夾下的custom_tags.py。
4.最後只要在模板加入{% load custom_tags %},然後需要遞迴的地方寫成:
{% for d in sub_dual %}
<p><span class="youtube-marker" data-start={{ d|get_item:"start" }} data-end={{ d|get_item:"end" }}>{{ d|get_item:"text" }}</span></p>
{% endfor %}