溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何讓python嵌入html實(shí)現(xiàn)類似php的快速開發(fā),十分有價(jià)值

發(fā)布時(shí)間:2020-06-13 15:02:02 來(lái)源:網(wǎng)絡(luò) 閱讀:355 作者:Python熱愛(ài)者 欄目:編程語(yǔ)言

1.在一個(gè)文件夾名為www.html3.com的web項(xiàng)目來(lái)實(shí)現(xiàn),首先到nginx的配置文件nginx.conf做如下配置
如何讓python嵌入html實(shí)現(xiàn)類似php的快速開發(fā),十分有價(jià)值
python和html混合編寫的文件,我以文件后綴為.phtml,通過(guò)服務(wù)器配置讓它重定向到 /rewrite/

2.進(jìn)去項(xiàng)目目錄下的static/html/ 編寫一個(gè)1.phtml 內(nèi)容如下(內(nèi)容是隨便寫的,只是為了測(cè)試)

<%
#define a variable 
str_var = "hello world" 

############# divide  ################
import time

if True:                        
        str_var2 = str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
else:
        str_var2 = "nothing"
%>
<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <title>phtml</title>
        <script>

        </script>
</head>
<body>
        <p>start</p>
        <p>I say: <span><% str_var  %></span></p>
        <p>I say: <span><% str_var2 %></span></p>
        <p>end</p>
</body>
</html>

注意:博主本人的想法是在html文檔前放一對(duì)分隔符且只是一個(gè),專門用于處理數(shù)據(jù)與邏輯,而后面的分隔符也就是嵌入到html文檔內(nèi)的那些分隔符,里面只放置一個(gè)變量名,用于輸出變量值,因?yàn)闀r(shí)間有限,只是簡(jiǎn)簡(jiǎn)單單實(shí)現(xiàn),請(qǐng)諒解!

3.我該項(xiàng)目是flask項(xiàng)目(核心思想與web框架無(wú)關(guān)),然后寫個(gè)路由,內(nèi)容如下

'''
遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006 
尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書!
'''
@app.route('/rewrite/')
def rewite():
        url_path = str(request.environ['REQUEST_URI'])[1:]
        if os.path.exists(url_path):
                oFile = open(url_path)
                text = oFile.read()
                pattern = re.compile('<%([\s\S]*?)%>')
                result = pattern.findall(text)
                content = []
                flag = 0
                while flag < len(result):
                        if flag == 0:
                                exec(result[flag].strip())
                                content.append('')
                        else:
                                content.append(locals()[result[flag].strip()])
                        flag += 1

                flag = 0
                def mysub(matched):
                        nonlocal flag
                        flag2 = flag
                        flag += 1
                        return content[flag2]

                res = re.sub('<%[\s\S]*?%>',mysub,text)
                return res
        else:
                return "404 not found"

代碼解釋:

  1.如果有看不懂request.environ['REQUEST_URI'],可以看一下博主之前寫的一篇文章“nginx的rewrite ,如何在flask項(xiàng)目中獲取重寫前的url”

  2.result變量用于存放匹配到分隔符內(nèi)的字符串,是列表

  3.content變量用于存放result列表每個(gè)元素解釋后的值,而content[0]放空字符串(因?yàn)闆](méi)有輸出,result[0]只用于通過(guò)exec( )來(lái)執(zhí)行字符串語(yǔ)句)

4.測(cè)試訪問(wèn)http://ww.html3.com/static/html/1.phtml
如何讓python嵌入html實(shí)現(xiàn)類似php的快速開發(fā),十分有價(jià)值

如何讓python嵌入html實(shí)現(xiàn)類似php的快速開發(fā),十分有價(jià)值
假設(shè)訪問(wèn)不存在的2.phtml


附:

通配符.  匹配除換行符\n之外的任何單字符

如果要匹配包括換行符的所有字符就不要用(.),用([\s\S])

關(guān)于如何解決貪婪匹配,加?

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI