Django入门教程(七)url的name参数详解

1、创建项目和app应用
django-admin startproject djangourlname
python manage.py startapp urlname
2、在项目根目录下创建templates文件夹,并新建index.html文件。
Django入门教程(七)url的name参数详解_第1张图片
3、注册app和配置templates模板文件搜索路径。
Django入门教程(七)url的name参数详解_第2张图片
Django入门教程(七)url的name参数详解_第3张图片

4、在urls.py文件中写入如下路由

from django.contrib import admin
from django.urls import path,re_path
from urlname import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add/',views.add,name='add'),
    path('index/',views.index),
]

Django入门教程(七)url的name参数详解_第4张图片

细心地同学就会发现,与我们之前写的url路由不同,后面多了个name参数,那么path(‘add/’,views.add,name=‘add’),这里的name='add’是用来干什么的呢?

①其作用主要是通过name的值,来查找url地址,可以理解为反射的作用。简单说,name 相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到。
②在html模板中使用name来反射url,优势是后期url规则发生改变之后,只需要调整urls.py即可,所有的模板文件都不需要修改。

5、在views.py中编写视图函数。

from django.shortcuts import render
from django.http import HttpResponse

def add(request):
    return HttpResponse('你访问了第一个url路由')

def index(request):
    return render(request,template_name='index.html')

Django入门教程(七)url的name参数详解_第5张图片
6、修改index.html模板内容。引用我们之前定义的add/这个路由。
Django入门教程(七)url的name参数详解_第6张图片
运行查看:
Django入门教程(七)url的name参数详解_第7张图片

从上图我们可以看到a标签的href属性是我们之前定义的add/这个路由,点击它也是可以正常访问的。
Django入门教程(七)url的name参数详解_第8张图片

7、现在我们对index.html稍作修改。改为下图所示:
Django入门教程(七)url的name参数详解_第9张图片
刷新index查看:
Django入门教程(七)url的name参数详解_第10张图片

发现它的href属性同样指向了我们之前定义的add/这个路由。这是怎么回事呢?请听我细细道来。

①这里就用到了我们之前在add/这个路由中写的那么参数。
②这个name参数就相当于对我们的URL进行命名,让我们能够在Django的任意处,尤其是模板内显式地引用它。
③这是一个非常强大的功能,相当于给URL取了个全局变量名,不会将url匹配地址写死。

现在解释下{% url ‘add’ %}这个标签的含义:

url是固定写法,表示当前要加载的url地址。'add’表示url路由对应的name参数值。 整体含义就是要加载name='add’的这个url地址。

使用name参数:

其好处就在于,当有许多模板都指向某个url时,我们可以很方便的指向它。当在后期需要更换地址时(前提是不改变name),就不会因为路由的修改影响整个地址的访问,不用造成大的页面改动。 同时,它的缺点就在于一旦name参数发生变化,就会造成整个页面的访问受到影响。

8、现在我们来证明这个问题。
①此时修改urls.py文件中的路由。如下图所示:
Django入门教程(七)url的name参数详解_第11张图片
再次刷新访问:
Django入门教程(七)url的name参数详解_第12张图片

发现整个页面的地址都同时变更,不用我们手动的对每一个a标签的href属性进行修改,对页面访问并无影响。
②现在我们将路由修改为原样,更改它的name参数:
Django入门教程(七)url的name参数详解_第13张图片
再次刷新,发现直接报错。
Django入门教程(七)url的name参数详解_第14张图片

经过上面的实验,证明了name参数对于整个地址的影响。同时应证了我们上面结论的正确性。
9、现在我们再对urls.py文件稍作修改,加入一条路由,如下图所示:
Django入门教程(七)url的name参数详解_第15张图片
修改views.py文件,实现一个求和的逻辑。
Django入门教程(七)url的name参数详解_第16张图片
同时修改index.html文件,如下图所示:
Django入门教程(七)url的name参数详解_第17张图片
注意:

①不带参数的:{% url ‘name’ %}
②带参数的:参数可以是变量名 {% url ‘name’ 参数 %}

刷新查看:
Django入门教程(七)url的name参数详解_第18张图片
此时,我们通过name这个参数,找到了re_path(r’^sum/(\d+)/(\d+)/$’,views.add1,name=‘add1’),这个路由,点击一个计算,同样会得到计算结果(可能有人就会说啦,4+5=9呀,哎,同学,你可走心啦,这是字符串相加。),其他两个就算就不一一打开看了。
Django入门教程(七)url的name参数详解_第19张图片

10、当然我们也可以根据路由的name参数来反向获取url地址。
①在urls.py中新增一条get_url的路由。
Django入门教程(七)url的name参数详解_第20张图片
②在views.py中编写业务逻辑。这里我们反向获取的是name="add1"的地址。
Django入门教程(七)url的name参数详解_第21张图片
访问查看
Django入门教程(七)url的name参数详解_第22张图片

当然也可以获取name="test"的地址,只不过在这是获取自身了。
这里用到了reserve()这个函数。reverse()这个函数就是根据url路由的name参数,来反向获取url地址的方法。

Django入门教程(七)url的name参数详解_第23张图片

你可能感兴趣的:(django)