天天看點

Django架構學習(1):url路由以及模闆渲染方式

url路由配置設定以及模闆渲染方式

一,url基本概念和格式

​ 1.1,基本概念

​ 是一個網址,全球統一資源定位符,作用:用來辨別網際網路上資源的位址。

​ 1.2,格式
Django架構學習(1):url路由以及模闆渲染方式

二,django的路由系統(url配置)

2.1,路徑通路出錯
Django架構學習(1):url路由以及模闆渲染方式

三,path和re_path(在新的app裡面則需要自己建立一個urls.py檔案)

​ 3.1,path
# 1,基本格式
urlpatterns = [
    path('admin/', admin.site.urls, kwargs=None, name=None)
]

# 2,從url中傳入參數
path('detail/<name>/', views.detail)	# 在路徑的後面使用<>進行參數捕捉,<>裡寫參數

# 3,路徑轉換器(預設str類型)
path('detail/<int:name>', view.detail)  # 插入的name必須是數字

# 4,在路徑中傳入多個參數
path('detail/<int:id>-<str:name>/', views.detail)	# 寫法一
path('detail/<int:id>/<str:name>/', views.detail)	# 寫法二
           
3.2,re_path
# 1,基本格式
urlpatterns = [
    re_path('admin/', admin.site.urls, kwargs=None, name=None)
]

# 2,使用正規表達式
re_path(r'student/(?P<id>\d+)/(?P<name>[a-z]+)', views.student)
# ?P是給分組命名,<>裡面寫參數名,後面寫正規表達式,用來比對<>裡的東西
           
​ 3.3,include(通路其他app的urls)
# 1,在根urls.py檔案的path下用include把其他APP的路由導入
path('student/', include('student.urls'))
# 當通路student的時候回跳轉到student這個app下的urls下
# 注意,如果在根目錄下傳參,必須在每個App下都設定能傳參的視圖函數
           
​ 3.4,kwargs(預設給參數,最高優先級)
path('student/', include('student.urls')),
    path('hello/<name>', views.hello, kwargs={'name': 'xyb'})
    
def hello(request, name):
    return HttpResponse('{}是多餘的'.format(name))
# 若已經定義了kwargs,後面再傳入的參數不生效,kwargs先生效
           
​ 3.5,name
from django.shortcuts import render, reverse, redirect

path('login/', views.login)
def login(request):
    return redirect('https://www.baidu.com/')
# 重定向,當通路login時,跳轉到百度的頁面

path('login/', views.login)
def login(request):
    return redirect('hello/')
# 當通路login/時,會直接跳轉到根目錄下的hello的視圖,不靈活,主路徑改了都得改

path('hello/', views.hello, kwargs={'name': 'xyb'}, name='hahaha')	# 命名成hahaha
def login(request):
    return redirect(reverse('hahaha'))     	# 動态解析路徑
# 當通路視圖函數login的時候自動跳轉到目前App命名為hahaha的路徑
           

​ 3.6,app_name

# 在每一個APP的url配置裡前面加上app_name = App名
app_name = 'student'
def login(request):
    return redirect(reverse('student:liu'))
# 代表了student下的index,不會和同名的重複
# 也可以用這個動态解析app_name跳到别的App下的視圖函數内
           
​ 3.7,路由系統原理
1,從根url裡面找,找到第一個比對到的路徑,再到其對應的視圖函數裡
2,從根url裡面找,通過include跳到對應的App下的路由裡,再找路徑,再去對應的視圖函數
3,若找不到傳回404
           

四,django模闆路徑配置

​ 1),放在根目錄下的templates設定
# 1,在根目錄CRM建立一個templates(工用)檔案夾,專門用來放置模闆
# 2,設定seting.py檔案裡面的TEMPLATES裡面的'DIRS':
'DIRS': [os.path.join(BASE_DIR, 'templates')]
           
​ 2),單獨放在App下的templates
# 1,建立一個新的App,把他下載下傳到pycharm中
python manage.py startapp App名
# 2,确認seting.py檔案裡面的TEMPLATES裡'APP_DIRS': True(允許通路app下的templates)
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'student'  # 把你的app名添加到這裡,前提是這個app裡有templates
]
           

五,django模闆渲染方式

from django.shortcuts import redirect, reverse, render
from django.template.loader import  get_template

def html(request):
    t = get_template('student/index.html')
    html = t.render()
    return HttpResponse(html)
# student為根目錄templates檔案夾下面的App,在通過HttpResponse傳回頁面

urlpatterns = [
    path('index/', views.index)
]
def index(request):
    return render(request, 'student/index.html')
# 更加簡便的方法
           
# 導入目前app下的templates下的模闆
def index(request):
    return render(request, 'index.html')
           
Django架構學習(1):url路由以及模闆渲染方式
# 導入根目錄下的templates下的模闆
def index(request):
    return render(request, 'student/index.html')
           
Django架構學習(1):url路由以及模闆渲染方式