程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django框架之URL反向解析、靜態文件配置以及應用的創建

編輯:Python

文章目錄

  • Django的URL反向解析
    • 模板層中使用
    • 視圖函數中的使用
  • Django靜態文件的配置
  • Django應用的配置
    • 創建應用
    • 分布式路由
    • 配置templates

Django的URL反向解析

網頁中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頁面。

Django靜態文件的配置

首先需要在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>

然後啟動能夠加載出圖片說明靜態資源訪問成功

Django應用的配置

創建應用

創建應用,相當於將網頁管理模塊化,每個應用都有自己的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

首先創建templates文件夾
然後再settings.py中開啟模板功能(默認開啟)
應用下的templates和外層templates都存在時,django查找規則如下:

  1. 優先查找外層templates目錄下的模板
  2. 按INSTALLED_APPS配置下的應用順序逐層查找。

首先再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.


訪問可以看到配置成功


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved