網頁中URL的嵌入必不可少,URL有絕對地址寫法和相對地址寫法,加上URL可能在復雜的工程中會變的很復雜,因此我們可以使用django中的URL反向解析的方法,為url取別名,然後直接用別名去訪問即可。
首先配置urls.py:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("index", views.index),
path("test_url_back/<int:number>", views.test_url_back, name="url1")
]
其中path中的name參數就是相當於為url取別名,到時候在HTML中直接調用即可得到對應的路由地址。
views.py
from django.shortcuts import render
from django.http import HttpResponse
def test_url_back(request, number):
html = str(number) + "hello back url"
return HttpResponse(html)
def index(request):
return render(request, "index.html")
templates中index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<a href="{% url "url1" "10086"%}">url反向解析</a>
</body>
</html>
{%url + 需要跳轉的url的別名 + 匹配傳入的參數%}
然後運行服務器:
點擊按鈕即可跳轉:
需要導入from django.urls import reverse
才能夠使用
下面配置一個訪問然後跳轉到另一個頁面的小例子。
首先urls.py:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("index", views.index, name="base_index"),
path("test_url_back/<int:number>", views.test_url_back, name="url1"),
path("new", views.new, name="new_html")
views.py:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
def test_url_back(request, number):
url = reverse("new_html")
# 響應請求後轉到url的路由
return HttpResponseRedirect(url)
def index(request):
return render(request, "index.html")
def new(request):
return render(request, "new.html")
new.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
hello world
</body>
</html>
然後啟動服務器,訪問http://127.0.0.1:8000/index
鼠標放在按鈕上顯示跳轉到http://127.0.0.1:8000/test_url_back/10086頁面
點擊按鈕之後
會自動跳轉到new頁面。
首先需要在setting.py中配置靜態文件路由:
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'), )
STATIC_URL = '/static/'在setting.py中默認存在,只需要加上下面那行即可,讓的django知道靜態文件所在的位置。
然後創建static文件夾以及子文件並將需要調用的資源放入
然後即可調用靜態文件。
Django還提供了一種比較簡便的方式
{
%load static%} # 先寫這個
{
% static “靜態資源路徑”%} # 之後就可用這種方式調用
用這樣的方式,就算setting.py中的靜態文件名改變了,django還是能夠成功找到資源,適用性更廣。
下面開始配置靜態文件的調用。
urls.py:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path("index", views.index, name="base_index"),
]
views.py:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
def index(request):
return render(request, "index.html")
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
hello world!
<img src="/static/img/log_left_up.png" width="50%" height="50%">
{%load static%}
<img src="{%static 'img/log_left_up.png'%}" width="50%" height="50%">
</body>
</html>
然後啟動能夠加載出圖片說明靜態資源訪問成功
創建應用,相當於將網頁管理模塊化,每個應用都有自己的MTV模式,便於各自管理與維護。
下面邊解釋邊舉例,例如要創建一個名為sports的應用:
創建應用 Python manage.py startapp 應用名稱
Python manage.py startapp sports
生成的文件目錄如下:
Migrations通常放置模型層和數據庫打交道那層的模型遷移文件的。
Admin.py和管理後台相關
Apps.py應用下的相關配置
Models,py模型層的入口,和數據庫相關
Tests.py測試入口
Views.py視圖函數
然後在setting.py的INSTALLED_APPS列表中配置安裝此應用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'sports'
]
既然可以使用應用來模塊化管理,那麼可以使用分布式路由來更加方便我們的管理。
Django中主路由配置文件urls.py可以不處理用戶具體路由,主路由配置文件的可以做請求的分發,具體的請求可以由各自的應用中的路由配置文件來進行處理。
因此我們可以配置分布式路由
主路由文件urls.py:
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path("sports/", include("sports.urls"))
]
現在主路由只需要將路由管理分給sports下的urls.py配置文件管理即可,不負責全部路由地址的跳轉。
Sports文件夾下創建urls.py:
from django.urls import path
from . import views
urlpatterns = [
path("sport_index", views.index),
]
這裡需要配置具體的路由地址,那麼到時完整的訪問路由就是主路由+子路由:http://127.0.0.1:8000/sports/sport_index
Sports下的views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("hello world sports!!!")
# Create your views here.
然後運行服務器,訪問http://127.0.0.1:8000/sports/sport_index
即可看到
說明分布式路由配置成功!
首先創建templates文件夾
然後再settings.py中開啟模板功能(默認開啟)
應用下的templates和外層templates都存在時,django查找規則如下:
首先再sports文件下創建templates文件夾
然後新建sport_new.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
hello world i am from app_sports
</body>
</html>
Sports下的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path("sport_index", views.index),
]
Sports下的views.py:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request, 'sport_new.html')
# Create your views here.
訪問可以看到配置成功