Django - template filter and tags

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语法,本篇文章分成几个步骤:
https://ithelp.ithome.com.tw/upload/images/20210328/20129725QOHgCFBr7j.png

  1. 在专案里面建立一个资料夹-templatetags(取名没有一定)
  2. 在templatetags里新增一个.py档,这边我新增一个custom_tags.py,之後就是在这个档案里定义函数来给模板做使用。
#custom_tags.py

from django import template
register = template.Library()

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)
  1. 重要的是要在settings.py做以下设定:
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 %}

<<:  CMoney菁英软件工程师战斗营游戏专题开端_Week 5

>>:  CMoney工程师战斗营weekly5

Rails幼幼班--Rails安装Tailwindcss

用gem跟CDN不好吗... 这麽简单的事情也要分享?? 因为,没常安装就忘东忘西了... 认命做...

Day 5 ( 入门 ) 转动的眼球

转动的眼球 教学原文参考:转动的眼球 这篇文章会介绍,如何在 Scratch 3 里使用重复无限次、...

[Day 18] 来看看v-pre、v-cloak、v-once呗

嗨嗨大家今天过得好吗?我今天成功煎了一颗蛋。今天的篇幅虽然看似有点短,但是里面的内容却是崭新且重要的...

[Day05 - UI/UX] 为APP制作 LOGO

要开始画一个LOGO之前我习惯先简单列出一些主题文字。这次要做的是一个旅游包包整理APP所以我列出下...

Laravel 实战经验分享 - Day29 剩下最後的两篇,该讲些什麽呢?

到了倒数第二天,一直在想自己该写什麽,在参加这个比赛之前,自己常埋首在自以为是的开发中,无论遇到什麽...