理解 Django 中的相對路徑與絕對路徑
更新日期: 2024 年 11 月 24 日
本文為 Django 進階教學,第 1 篇:
- 理解 Django 中的相對路徑與絕對路徑 👈 所在位置
- Django URL 路徑設置|name 參數與命名空間(Namespace)
- Django 串接資料庫與模型建構:完整入門指南
- Django 模型遷移與資料庫同步完整指南
- 使用 Django ORM 將資料寫入資料庫:新手入門指南
- Django 實現 CRUD 的 C(Create):新增資料功能完整指南
- Django CRUD 的 R(Read):資料讀取與顯示功能指南
- Django CRUD 的 U(Update):資料更新功能完整指南
- Django CRUD 的 D(Delete):資料刪除功能完整指南
建議閱讀本文前,先閱讀完 Django 新手教學 系列文
在網頁開發中,URL 的設置是非常重要的一部分,特別是在使用 Django 等框架時。
本文將幫助新手理解「相對路徑」與「絕對路徑」的差異、它們的使用場景,以及如何在 Django 中配置和選擇適合的路徑策略。
什麼是相對路徑?
相對路徑的語法與含義
- 語法:相對路徑不以
/
開頭,例如:resumes/new
。 - 含義:路徑是相對於當前頁面的路徑,會根據當前頁面的位置進行解析。
相對路徑的使用場景
當你希望基於當前頁面的 URL 動態解析目標地址時,可以使用相對路徑。
範例
- 如果當前頁面的 URL 是
https://example.com/about/
,相對路徑resumes/new
會解析為:https://example.com/about/resumes/new
- 如果當前頁面的 URL 是
https://example.com/
,相對路徑resumes/new
會解析為:https://example.com/resumes/new
Django 中如何檢查路徑設置?
在 Django 中,檢查 URL 配置是判斷路徑的關鍵。
以下是常見的檢查步驟與範例:
- 檢查
mysite/urls.py
主要負責網站的全域路由配置,例如:
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('resumes/', include('resumes.urls')), # 將 resumes 應用的子路徑指向 resumes/urls.py
]
- 檢查應用內的
app/urls.py
這是應用的子路徑設置,例如 resumes 應用的路徑配置:
# resumes/urls.py
from django.urls import path
from . import views
app_name = 'resumes'
urlpatterns = [
path('new/', views.new_resume, name='new'), # 新增 Resume 的路徑
path('', views.index, name='index'), # 首頁路徑
]
這些配置會決定 HTML 模板中的相對路徑如何解析。
例如,在 HTML 中:
<a href="new/">新增 Resume</a>
當前頁面 URL 是 https://example.com/resumes/
時,會解析為:
https://example.com/resumes/new/
注意:在相對路徑中,添加斜線 new/
是更精準的寫法,因為它清楚地表達了目標是資料夾或具體路徑的起始點。
絕對路徑的特性
絕對路徑的語法與行為
- 語法:絕對路徑以
/
開頭,例如:/resumes/new/
。 - 行為:無論當前頁面的 URL 是什麼,絕對路徑都會被解析為一個固定的地址。
範例比較
假設網站有以下兩個 URL:
https://example.com/resumes/
https://example.com/resumes/new
- 使用 絕對路徑
/resumes/new/
:- 無論當前頁面在哪裡,瀏覽器都會跳轉到:
https://example.com/resumes/new/
- 無論當前頁面在哪裡,瀏覽器都會跳轉到:
- 使用 相對路徑
resumes/new/
:- 如果當前頁面是
https://example.com/resumes/
,跳轉結果為:https://example.com/resumes/resumes/new/
- 如果當前頁面是
https://example.com/
,跳轉結果為:https://example.com/resumes/new/
- 如果當前頁面是
推薦做法
為什麼選擇絕對路徑?
在 Django 或其他 Web 開發中,通常建議使用 絕對路徑,因為它不依賴於當前頁面的 URL,解析結果更加穩定,避免因路徑錯誤導致的跳轉問題。
直接使用絕對路徑範例
在 HTML 中,建議直接填入絕對路徑以保證穩定性:
<a href="/resumes/new/">新增 Resume</a>
以上語法會始終正確地跳轉到:
https://example.com/resumes/new/
結論
- 相對路徑 適用於動態生成的子路徑,但需要謹慎處理上下文,並建議在路徑中添加斜線(如
new/
)以提高準確性。 - 絕對路徑 更加穩定,特別是在開發框架中,直接填入絕對路徑
/resumes/new/
是更安全的選擇。
學會正確設置與使用路徑,是打造穩定與可維護網站的重要基礎!