基礎(chǔ)知識(shí)
要使用Flatpages,需要至少讀完Django官方文檔Tutorial 1-4,安裝Django環(huán)境、了解manage.py一些基礎(chǔ)的命令、了解url pattern等。
官方文檔
Flatpages有官方的指導(dǎo)文檔,但是跟著一步一步操作下來之后,卻發(fā)現(xiàn)在自己的環(huán)境中是執(zhí)行失敗的。有很多需要注意的點(diǎn),在文檔中沒有說明,或者是含糊其辭,讓初學(xué)者一頭霧水。
后面的內(nèi)容主要以介紹官網(wǎng)文檔的坑點(diǎn)為主,不會(huì)詳細(xì)說明每一步具體操作。
坑點(diǎn)
-
需要在settings.py文件中的INSTALLED_APP部分中添加兩個(gè)APP
- django.contrib.sites
- django.contrib.flatpages
這里一定需要添加sites這個(gè)APP,不然會(huì)失敗。
-
文檔中提示了要注意SITE_ID。這里是需要同樣在settings.py文件中添加SITE_ID這個(gè)屬性:
image.png
這里的site_id實(shí)際上是第一部添加的sites APP的object primary key。Flatpages model中有一個(gè)Foreign Key的引用關(guān)聯(lián)到site上,所以這里要設(shè)置site id。而在啟用sites app的時(shí)候,django會(huì)默認(rèn)創(chuàng)建一條名字叫‘example.com’的site,所以如果創(chuàng)建一個(gè)‘localhost’的site時(shí),site id就是2了。
-
在UrlConf中添加urlpatterns,官方文檔用的是'pages/'。這步添加urlpatterns其實(shí)沒問題,問題在于如果你添加后,用http://127.0.0.1:8000/pages/這個(gè)url去訪問flatpages是會(huì)報(bào)錯(cuò)的。如果你查看一下flatpages.urls的定義就會(huì)發(fā)現(xiàn),里面還有一層urlpatterns,定義的規(guī)則是'<path:url>',這里因?yàn)槲沂浅鯇W(xué),也是看了半天不知其所以然,想不通url應(yīng)該是什么。知道我打開了django自帶的admin APP。
home
這個(gè)時(shí)候可以看到Home頁面上多出來了Flat Pages和Sites兩個(gè)APP可以管理數(shù)據(jù),點(diǎn)進(jìn)去sites就會(huì)發(fā)現(xiàn)有前面說到的‘example.com’這個(gè)site,那它的ID就是1。如果你在settings.py中設(shè)定了SITE_ID=1可就錯(cuò)了。接下來新建一個(gè)site叫‘localhost’,id自然是2。
flatpages
在Flat pages中可以看到需要設(shè)定URL字段的值,這里就是前面說的flatpages.urls中的urlpatterns的正確打開方式。注意開頭和末尾的'/'都是必須的。同時(shí)在Sites中選擇關(guān)聯(lián)上localhost。 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware' 可以不添加。因?yàn)槲覜]有繼續(xù)深入的研究,只是初級(jí)功能的話不添加目前也沒有影響。
-
最重要的一步,是在APP的templates路徑下創(chuàng)建flatpages/about.html。如果你的page名稱是別的如license,那就放license.html。Flatpages會(huì)讀取這個(gè)html文件直接展示在頁面上。
templates/flatpages/about.html
templates的設(shè)定文檔在比較后面才提到,我剛一上手把installation看完就想直接打開flatpages看看效果,可想而知是不成功的。
總結(jié)
以上坑都踩過,基本flatpages就可以正常使用了。html頁面中具體要放那些內(nèi)容就自由發(fā)揮,各憑本事了。
感覺Flatpage在國內(nèi)用的比較少吧,各大搜索引擎上可參考的資料都不多。而且因?yàn)槌鯇W(xué),自己也摸不清問題出在哪里,只能亂投醫(yī)。不過好在最后算是解決了。
下方是我參考過的資料,多少都提供了點(diǎn)幫助,略表感謝。
全棧一路坑之使用django創(chuàng)建博客
Stack Overflow