[Day 29]用Django架构建置专属的LINEBOT吧 - LIFF(II)Django Template样板

Django的Template(样板)

在Django专案刚建立的时候,
我们可以从views.py档案当中看到一行被内建的函数库已经被import在里面了,
库名叫做render,

from django.shortcuts import render

render这个函数库,是搭配Django的template架构一起使用的,
在前面我们有提到了Django内建的其他部分,
包括了models,admin,urls,views,static等等,
而template这个部分主要的用途,
是让开发者能够以python进行网页开发使用,

这边介绍一下render函数,
render函数主要用途是当用户端透过URL触发urls.py中所设定的函数时,
可以透过render来回传一个样板至用户端,
使用方法如下:

render(request, template_name, context)

第一个参数内建为request,
template_name则为回传的样板名称,也就是html档案名称,
如果有资料想要带到样板中来显示时,
可以透过context参数来设定,
是以python的dictionary的资料型态输入到样板中,
带入html档案的,

先来做个简单的测试吧,
在这边需要先检查template路径是否有在settings.py中完成设定,

#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',
            ],
        },
    },
]

接着确认一下template资料夹是否有建立在Django的专案资料夹当中,

https://ithelp.ithome.com.tw/upload/images/20201014/20121176kV7FaXsanM.jpg

接下来我们在template资料夹中建立一个子资料夹,
随便命名即可,目的是让我们在使用render函数时可以指定路径来避免同名的html互相冲突,
也可以与APP的资料夹同名,这样管理上比较方便,

完成之後在资料夹中新增一个index.html档案,
并且将下列程序码输入至html档案,

<!DOCTYPE html>
<html>
    <head>
        <meta charset='utf-8'>
        <title>第12届铁人赛</title>
    </head>
    <body>
        <h1>铁人赛的进度:Day {{day}} 完成</h1>
        <h2>篇名:{{post_title}}</h2>
    </body>
</html>

由於在template当中读取变数的语法为{{变数}},
因此在上面的html档案中,{{day}}及{{post_title}}是要透过render带进去的,

接着我们在urls.py档案当中设定指定的URL与函数关系式,

#urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    url('^callback',views.callback),
    url('^notify',views.notify),
    url('^Weather_Predict',views.Weather_Predict),
    url('^index',views.index),#当进入http://domain/index网址时,触发index函数
]

接着在views.py中建立index函数:

def index(request):
    day = 29
    post_title = '[Day 29]用Django架构建置专属的LINEBOT吧 - LIFF(II)template与LIFF'
    return render(request,'IT_help/index.html',locals())

其中locals()是将本地参数带入,
我们也可以自订dictionary将参数带入template当中:

def index(request):
    data = dict()
    data['day']=29
    data['post_title']='[Day 29]用Django架构建置专属的LINEBOT吧 - LIFF(II)template与LIFF'
    return render(request,'IT_help/index.html',data)

或者我们也可以将在index函数的参数当中设定,
从URL当中将参数带入到template当中,
如果要用URL带入参数,则需要将urls.py重新设定:

#urls.py
urlpatterns = [
    path('admin/', admin.site.urls),
    url('^callback',views.callback),
    url('^notify',views.notify),
    url('^index/(\w+)/$',views.index),
    url('^Weather_Predict',views.Weather_Predict),
]

将index函数改写为下列方式:

#views.py
def index(request,day):
    post_title = '[Day 29]用Django架构建置专属的LINEBOT吧 - LIFF(II)template与LIFF'
    return render(request,'IT_help/index.html',locals())

前述两种方式设定完毕後,
都可以在进入http://domain/index 得到下面的结果:

https://ithelp.ithome.com.tw/upload/images/20201014/20121176P2gdMY04Tx.jpg

第三种方式需要加入day参数,URL改写为http://domain/index/29

实际操作影片:

由於LIFF是提供给JavaScipt及html网页的前端API,
因此在python基础下将参数带入网页是一个重要的基础,

明天最後一天再讲到关於LINE LIFF网页的建立吧,
今天实在太忙啦~
/images/emoticon/emoticon06.gif


<<:  [Day30]蓝牙的学习笔记下台一鞠躬

>>:  [2020铁人赛] Day29 - 切换身分Impersonation

【Day7】Vocoder Model 以及 WaveNet 介绍

声码器 (Vocoder) 合成语音的概念最早是由贝尔实验室的工程师 - 荷马·达德利在 1928 ...

Day-25 说明一下 Rails 的 MVC 架构是什麽?优点是?

我写的 Rails 的 R+MVC 笔记图 左上角的那个人是使用者,当使用者输入网址连上网址进入网...

Day24 实作MiddleWare(1)

昨天跟大家介绍完middleware之後,大家应该都比较了解他的功用了吧!(应该有吧... 那既然大...

[Day10]字符函数

字符函数,又分为大小写转换函数及字符处理函数。 大小写转换函数: 字符处理函数: 下篇会从日期单列函...

Day11回圈(Ⅰ)

当我们需要程序1.重复执行2.判断对错就需要用到回圈,像是算面积,算完一个想再算一个可以利用回圈让使...