url路由配置設定以及模闆渲染方式
一,url基本概念和格式
1.1,基本概念
是一個網址,全球統一資源定位符,作用:用來辨別網際網路上資源的位址。
1.2,格式

二,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')
# 導入根目錄下的templates下的模闆
def index(request):
return render(request, 'student/index.html')