iT邦幫忙

2

[不做怎麼知道系列之Android開發者的30天後端養成故事 Day5] - 當個小畫家 #改變我的首頁 #前後端怎麼結合 #讓Django讀取HTML

Sam 2020-02-07 16:02:401403 瀏覽

https://ithelp.ithome.com.tw/upload/images/20200207/20124548lgiJ4HZs3v.png

大家好,我們又見面了,今天我們要做什麼呢? 今天 RS 想要讓 Django 顯示我自己的首頁,這樣我才可以開始做我想要的功能嘛!

那麼我要怎麼更改我的首頁呢 ?

我現在有一個 html 檔:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>RS shop</title>
    <h1 align="center">RS 的 Django 測試</h1>
</head>
<body>
    <div align="center">
        <form method="post" action="./api/username">
            你的名字:<input type="text" name="username" placeholder="name"> 
						<button type="submit">送出</button>
        </form>
    </div>
</body>

<br>
<br>

<footer>
    <div align="center">Made by RS, 2020-02-07</div>
</footer>

</html>

長這樣,可以注意到網址是本地端網址:

https://ithelp.ithome.com.tw/upload/images/20200207/20124548Xxw1vq4rR5.png

我的專案架構是

https://ithelp.ithome.com.tw/upload/images/20200207/20124548SgPPbX8fLZ.png

我把要當成首頁的 index.html 檔,放在 /templates/blog/ 底下。

那麼該怎麼告訴 Django 我的首頁在這裡呢?

修改 urls.py

urls.py 所定義的是 「告訴 Django,我們接收到這樣的一個網址,該怎麼做?」,該找出哪一個 html 頁面給使用者看呢?

from django.conf.urls import url
    
# 我們在 blog/views.py 裡面定義一個 hello 的 function
from blog.views import hello
    
urlpatterns = [
    # 代表 127.0.0.1:8000/
    url(r'^$', hello),
    
	# 代表 127.0.0.1:8000/blog/,
 	# 將會執行 blog/views.py 裡面的 hello function
    url(r'^blog$', hello)
]

2020-02-08 更新
感謝網友 e96031413 更正,url() 是 django 2.0 以前的用法,現在 django 2.0 之後,都是使用 path(),可以參考 [Python] Django 2.0 以 path 函式設定 urlpatterns,這篇有介紹 path() 該怎麼用。

修改 blog/views.py

from django.shortcuts import render
    
def hello(request):
    context = {}
    
    # 表示會載入 templates/blog/index.html
    return render(request, 'templates/blog/index.html', context)

到底能不能成功呢!

Django 跑起來!

$ python manage.py runserver

最後你將看到

https://ithelp.ithome.com.tw/upload/images/20200207/20124548Q3cFbsdwoM.png

看到網址是 127.0.0.1:8000,就代表你成功了!

那我要怎麼拿到使用者填完的資料呢?

這就是我們明天要提的 API

單日心得總結

大家應該能明顯感覺到,今天這篇文章和前幾天的文章很不一樣,因為我覺得前幾天實在是太貪心了,我很努力在一篇文章中,塞入整天所學習到的內容、想容易讓人看得懂的舉例,並且還要兼顧系統性、可閱讀性,這樣的工作量對我來說真的很硬。因為花很多時間在寫文章,反而壓縮到我學習的時間,所以我做了這樣的嘗試,限縮文章的主題、讓文章的目標更明確,不知道你們的想法如何,如果有任何建議歡迎在底下留言。

我是 RS,這是我的 不做怎麼知道系列 文章,我們 明天見。



2 則留言

1
Yanwei Liu
iT邦新手 5 級 ‧ 2020-02-08 09:26:46

寫的相當的清楚明確欸,如果我那時學Django有看到你的文章應該可以省下很多時間XD

不過url(r'^blog$', hello)似乎是舊版的寫法了

目前Django 2.0之後的版本已經換成path函式,可參考以下連結
http://blog.e-happy.com.tw/django2-0-%E4%BB%A5-path-%E5%87%BD%E5%BC%8F%E8%A8%AD%E5%AE%9A-urlpatterns/

Sam iT邦新手 5 級 ‧ 2020-02-08 15:52:50 檢舉

感謝你的鼓勵!
這樣我可以比較放心照這樣的模式寫下去了XD

不過url(r'^blog$', hello)似乎是舊版的寫法了
目前Django 2.0之後的版本已經換成path函式,可參考以下連結
http://blog.e-happy.com.tw/django2-0-%E4%BB%A5-path-%E5%87%BD%E5%BC%8F%E8%A8%AD%E5%AE%9A-urlpatterns/

原來如此!
我就在想說 url() 跟 path() 都可以通,到底差在哪
一個恍然大悟的概念
謝謝你 <3

Sam iT邦新手 5 級 ‧ 2020-02-08 16:55:04 檢舉

哈囉 e96031413,已經把你提供的連結更新到文章囉,再次感謝你~

不用客氣啦~
大家互相學習XD

0
paul12999
iT邦新手 5 級 ‧ 2020-05-08 16:31:25

安安

如果blog裡沒有/templates的資料夾,請問要自創阿

目前照著方法試結果開啟頁面出現TemplateDoesNotExist at/
blog/index.html
我猜應該是我urls.py 路徑錯了
如果index.html放在blog
是 path('', hello),
path('/blog/index.html', hello) 嗎? @@

templates資料夾要自己創
我一開始也遇到跟你一樣問題
我的解法是
return render(request, 'your_app_name/index.html')
這樣就過了

Sam iT邦新手 5 級 ‧ 2020-05-23 13:48:14 檢舉

paul12999
抱歉我最近在處理緊急重要的事情,沒辦法即時回覆
TemplateDoesNotExist 是 Django 找不到你指定的 html
html 路徑的問題,可以試試看樓上講的那個解法,
主要還是要看你 html 放在哪裡,相對路徑多嘗試幾個
還有路徑最前面要不要 /,都嘗試看看就可以知道路徑怎麼放了

不是 urls.py 的問題, urls.py 是網址路徑

我要留言

立即登入留言