(django)url路由配置及渲染方式

一,url路由path及轉(zhuǎn)化器

URL(uniform Resoure Locator)統(tǒng)一資源定位符盖灸,是對可以從互聯(lián)網(wǎng)上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址,互聯(lián)網(wǎng)上的每個文件都有唯一的URL演闭,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它褒颈。

設(shè)置好url柒巫,用戶才能訪問

1,URL的格式:

例如:http://127.0.0.1:8000/hello/

解釋:

schema://host[:port#]/path/.../[?query-string][#anchor]

schema:指定使用的協(xié)議(如:http,https,ftp)

host:Http服務(wù)器的IP地址或者域名

port:端口號谷丸,http默認是80端口

path:訪問資源的路徑

query-string:發(fā)送給http服務(wù)器的數(shù)據(jù)

anchor:錨點

2堡掏,urls.py的作用

URL配置(URLconf)就像是Django所支撐網(wǎng)站的目錄。它的本質(zhì)是URL模式以及URL模式調(diào)用的視圖函數(shù)之間的映射表刨疼。以這樣的方式告訴Django泉唁,對于哪個URL調(diào)用那段代碼。URL的加載就是從配置文件中開始

例如:在項目下urls.py文件:

from django.contrib import admin

from django.urls import path

from . import views

urlpatterns = [

? path('admin/', admin.site.urls),

path("abc/",views.hello),

path("ab/", views.hello_python),

path("ab//", views.hello_name),#獲取變量name

]

views.py文件:

from django.shortcuts import render

from django.http import HttpResponse

# Create your views here.

def hello(request):

?? return HttpResponse("123344")

?def hello_python(request):

?? return HttpResponse("HELLO PYTHON!!")

def hello_name(request,name):

?? return HttpResponse("hello %s"%name)#傳進去變量name

3揩慕,path基本規(guī)則

path('test//',views.test)

1:使用尖括號(<>)從url中捕獲值游两。包含一個轉(zhuǎn)化器類型(converter type)沒有轉(zhuǎn)化器,將匹配任何字符串漩绵,當(dāng)然也包括了 / 字符

2:當(dāng)前面的url匹配成功后就會調(diào)用后面的視圖函數(shù)

4贱案,轉(zhuǎn)化器:

path('test/int:xx/',views.test3)

path("/", views.hello_name),

#類型轉(zhuǎn)換(path已經(jīng)提供好的轉(zhuǎn)換器int)

默認的轉(zhuǎn)換器:

str,匹配除了路徑分隔符(/)之外的非空字符串,這是默認的形式int,匹配正整數(shù)止吐,包含0宝踪。

slug,匹配字母、數(shù)字以及橫杠碍扔、下劃線組成的字符串瘩燥。

uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00不同。

path,匹配任何非空字符串厉膀,包含了路徑分隔符

二溶耘,re_path及incloude例子

1,正則表達式對應(yīng)的要用re_path(類型轉(zhuǎn)化器)

re_path("(?p\d+)",views.hello_name),#正則表達式寫法(轉(zhuǎn)換器)

#url.py

re_path('^hello/$',views.test5), ? ?

re_path('^hello/(?P[0-9]+)/',views.test6),

#views.py

def test5(request): ? ?

? ? return HttpResponse('這是用的re_path設(shè)置的')

def test6(request,yy): ? ?

? ? print(yy,type(yy)) ? ?

? ? return HttpResponse('hello %s'%yy)

2服鹅,incloude分配路由:

一個project有一個總的urls.py各個app也可以自己建立自己的urls.py用include()函數(shù)在project的urls.py文件進行注冊

主目錄下分配路由到其他目錄urls.py

from django.contrib import admin

from django.urls import path,include

from . import views

urlpatterns = [

?? path('admin/', admin.site.urls),

?? path('book/',include('book.urls')),

]

path('book/', include("book.urls")),#給APP分配路由

分路由下配置url.py

from django.urls import path

from . import views?

urlpatterns = [

?? path('index/', views.hello),

?? ]

APP下的視圖文件views.py

from django.shortcuts import render

from django.http import HttpResponse

# Create your views here.

def hello(request):

?? return HttpResponse("這是book主頁")

有變量也可用在app里(與主項目用法相同)

def hello(request,book_name,**kwargs):

?? print(book_name)

?? return HttpResponse("這是book主頁")

path('index//', views.hello),

三凳兵,kwarg,name,redirect,reverse頁面重定向

1,kwargs的作用

傳遞一個Python 字典作為額外的參數(shù)傳遞給視圖函數(shù)企软。

# 主urls.py文件

from django.contrib import admin

from django.urls import path,include

urlpatterns = [ ? ?

? ?? path('admin/', admin.site.urls), ? ? ? path('book/',include('book.urls'),{'switch':'true'}),

? ?? ]

視圖函數(shù)中可以通過關(guān)鍵字參數(shù)獲取到

# APP books里面的views.py

from django.http import HttpResponse

import datetime

def index(request,**kwargs): ? ?

?? if kwargs.get('switch') == 'true':

? ? ? ? print(datetime.datetime.now())

?? return HttpResponse('這個book的首頁!!')

Kwargs為字典類型可以傳遞額外的參數(shù)到views中使用include的時候需要統(tǒng)一給下面的url一些參數(shù)的時候顯得尤其有用

2庐扫,name

name參數(shù)可以給這個url取一個合適的名字。通過給url取名字仗哨,以后在view或者模板中使用這個URL形庭,就只需要通過這個名字就可以了。這樣做的原因是防止url的規(guī)則更改厌漂,會導(dǎo)致其他地方用了這個url的地方都需要更改萨醒,但是如果取名字了,就不要做任何改動了苇倡。

給一個匹配的url地址取名字一般用于模板,也可以使用reverse進行頁面重定向

頁面重定向

from django.shortcuts import render,redirect

from django.http import HttpResponse

# Create your views here.

?def article(request,**kwargs):

?? return redirect("/book/article_new/") #頁面跳轉(zhuǎn)

? ? return HttpResponse("這是老的頁面")

def article_new(request,**kwargs):

?? return HttpResponse("這是新的頁面")?

from django.urls import path

from . import views

urlpatterns = [

?? path('article/', views.article),

?? path('article_new/', views.article_new),

redirect是重定向,reverse是將url的name解析成url本身的函數(shù)

from django.shortcuts import render,redirect,reverse

from django.http import HttpResponse

# Create your views here.

?def article(request,**kwargs):

?? return redirect(reverse("new_article"))

?? return HttpResponse("這是老的頁面")

def article_new(request,**kwargs):

?? return HttpResponse("這是新的頁面")

from django.urls import path

from . import views

urlpatterns = [

?? path('article/', views.article),

?? path('article_new/', views.article_new,name="new_article"),

?? #name與path匹配

]

四验靡,模板渲染

Django怎樣去調(diào)用漂亮的HTML前端頁面呢?

1.直接將html字符串硬編碼HttpResponse中

def index_1(request):

return HttpResponse("hello django world!")

2.django.template.loader 定義了函數(shù)以加載模板

1.在主目錄下創(chuàng)建一個templates目錄用來存放所有的html的模板文件.2.templates目錄里面在新建各個以app名字命名的目錄來存放各個app中模板文件.

?2,將我們的設(shè)置好的存放html模板的templates目錄路徑添加到DIRS中

#在setting.py中找到templates,修改"DIRS"?

TEMPLATES = [

?? {

? ? ?? 'BACKEND': 'django.template.backends.django.DjangoTemplates',

? ? ?? 'DIRS': [os.path.join(BASE_DIR, 'templates')]

? ? ?? ...

render方法上傳(views.py文件)

from django.template.loader import get_template

def index(request,**kwargs):

? ? ? ?t=get_template("book/index.html")

? ? ? ?html=t.render()

? ? ? return HttpResponse(html)

3.使用render進行渲染。

只用render 方法上傳**

def index(request,**kwargs):

?? return render(request,"book/index.html")

模板里傳參

#有變量name渲染(views.py)

def index(request,name,**kwargs):

render(request,"book/index.html",context={"name":name})

#urls.py

from django.urls import path

from . import views

urlpatterns = [? ?

path('index//', views.index),?

? ]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雏节,一起剝皮案震驚了整個濱河市胜嗓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钩乍,老刑警劉巖辞州,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寥粹,居然都是意外死亡变过,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門涝涤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媚狰,“玉大人,你說我怎么就攤上這事阔拳≌腹拢” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵糊肠,是天一觀的道長辨宠。 經(jīng)常有香客問我,道長货裹,這世上最難降的妖魔是什么嗤形? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮弧圆,結(jié)果婚禮上赋兵,老公的妹妹穿的比我還像新娘笔咽。我一直安慰自己,他們只是感情好霹期,可當(dāng)我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布叶组。 她就那樣靜靜地躺著,像睡著了一般经伙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勿锅,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天帕膜,我揣著相機與錄音,去河邊找鬼溢十。 笑死垮刹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的张弛。 我是一名探鬼主播荒典,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吞鸭!你這毒婦竟也來了寺董?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刻剥,失蹤者是張志新(化名)和其女友劉穎遮咖,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體造虏,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡御吞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了漓藕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陶珠。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖享钞,靈堂內(nèi)的尸體忽然破棺而出揍诽,到底是詐尸還是另有隱情,我是刑警寧澤栗竖,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布寝姿,位于F島的核電站,受9級特大地震影響划滋,放射性物質(zhì)發(fā)生泄漏饵筑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一处坪、第九天 我趴在偏房一處隱蔽的房頂上張望根资。 院中可真熱鬧架专,春花似錦、人聲如沸玄帕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裤纹。三九已至委刘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鹰椒,已是汗流浹背锡移。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留漆际,地道東北人淆珊。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像奸汇,于是被迫代替她去往敵國和親施符。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容