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

一,url路由path及转化器

URL(uniform Resoure Locator)统一资源定位符,是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址,互联网上的每个文件都有唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

设置好url,用户才能访问

1,URL的格式:

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

解释:

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

schema:指定使用的协议(如:http,https,ftp)

host:Http服务器的IP地址或者域名

port:端口号,http默认是80端口

path:访问资源的路径

query-string:发送给http服务器的数据

anchor:锚点

2,urls.py的作用

URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于哪个URL调用那段代码。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基本规则

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

1:使用尖括号(<>)从url中捕获值。包含一个转化器类型(converter type)没有转化器,将匹配任何字符串,当然也包括了 / 字符

2:当前面的url匹配成功后就会调用后面的视图函数

4,转化器:

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

path("/", views.hello_name),

#类型转换(path已经提供好的转换器int)

默认的转换器:

str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式int,匹配正整数,包含0。

slug,匹配字母、数字以及横杠、下划线组成的字符串。

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

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

二,re_path及incloude例子

1,正则表达式对应的要用re_path(类型转化器)

re_path("(?p\d+)",views.hello_name),#正则表达式写法(转换器)

#url.py

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

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

#views.py

def test5(request):    

    return HttpResponse('这是用的re_path设置的')

def test6(request,yy):    

    print(yy,type(yy))    

    return HttpResponse('hello %s'%yy)

2,incloude分配路由:

一个project有一个总的urls.py各个app也可以自己建立自己的urls.py用include()函数在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 字典作为额外的参数传递给视图函数。

# 主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'}),

     ]

视图函数中可以通过关键字参数获取到

# 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为字典类型可以传递额外的参数到views中使用include的时候需要统一给下面的url一些参数的时候显得尤其有用

2,name

name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个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/") #页面跳转

    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本身的函数

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怎样去调用漂亮的HTML前端页面呢?

1.直接将html字符串硬编码HttpResponse中

def index_1(request):

return HttpResponse("hello django world!")

2.django.template.loader 定义了函数以加载模板

1.在主目录下创建一个templates目录用来存放所有的html的模板文件.2.templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件.

​2,将我们的设置好的存放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), 

  ]

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容