2017-04-25 60 views
1

我的問題更多的是禮儀主題,而不是其他任何東西。我正在開發一個相對較小的應用程序,它讀取XML數據並寫入Oracle數據庫並輸出到網頁。Django在單獨的文件中的html模板

我在閱讀「Django權威指南:Web開發完成」一書,主要是因爲學習新東西很有趣,我認識到越來越多的工程師需要使用Django體驗。

在這本書中,有一個建議將html模板與其他代碼分開(例如,在它自己的文件夾中的.html文件中)。

這樣做有什麼好處,而不是隻留下嵌入在我的python腳本中的html模板?

我使用的模板是約15行,並使用該數據在生成列表來填充HTML文本:

path_to_be_used = desktop_path + 'XURA_output.html' 
f = open(path_to_be_used, 'w') 

string = """<html> 
<head><title>XURA Messaging</title></head> 
<body> 
<p>XURA Message contents: the data contained in this page is the Push Notification output retrieved from the XURA server.<br> 
Upon arrival this data is subsequently written to the Oracle database.   
""" 
f.write(string) 

line1 = "<p><pre>TAG".ljust(28) + "| " + "TEXT".ljust(40) + " </pre>" 
f.write(line1) 

for tag in smsreport_list: 
    tagInfo = tag[0] 
    textInfo = tag[1] 
    loop_line = "<pre>" + tagInfo.ljust(20) + "| " + textInfo.ljust(40) + " </pre>" 
    f.write(loop_line) 

line2 = """</p></body> 
</html>""" 

f.write(line2) 
f.close() 

回答

3

兩件事情,馬上跳到記住關於Django模板,是

  1. 模板繼承
    你可以有你的模板繼承它們之間相似的行爲,一些你不能正常做。

  2. 呈現視圖數據的模板
    在你的代碼是將數據傳遞到您的html字符串,在運行時。 您可以通過使用django's template language來避免這種情況,其邏輯操作如if,elseif和循環操作如for。您還可以高效且簡單的方式在您的html模板和您的django視圖之間傳遞數據,這使得您的模板更「動態」。

具有的上述兩種情況下,一個簡單的例子來看看herehere(也可以參考whole article)。

3

約翰的回答給出了兩個很好的理由。這裏有兩個:

  1. 從控制器代碼中分離模板簡化了兩者。您不必知道HTML在控制器功能上的工作;你不需要知道Python來處理模板。您的編輯器或IDE也更有可能通過單獨的文件提供語法突出顯示,完成等。

  2. 保持視圖和控制器分離(和模型,太,雖然你不問的事情)經常導致代碼更容易自動化測試工具,如測試 Python的內置unittest庫。 Django利用這個庫進行自己的測試。這部分是由於較低的coupling以及可能較高的cohesion造成的。