【Django03】URL_name

#test_cal\urls.py

from django.contrib import admin
from django.urls import path
from app_cal import views as cal_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('add/',cal_views.add,name = 'add'),
    path('add/<int:a>/<int:b>',cal_views.add2,name = 'add2')
]

#name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到。
#修改app_cal\views.py
#添加代码如下

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

将app_cal添加至test_cal\settings.py文件中INSTALLED_APPS项

这样,使用render的时候,Django 会自动找到 INSTALLED_APPS 中列出的各个 app 下的 templates 中的文件。

,DEBUG=True 的时候,Django 还可以自动找到 各 app 下 static 文件夹中的静态文件(js,css,图片等资源),方便开发。
在这里插入图片描述

#在app_cal中新建一个temolates文件夹,并在templates中新建一个home.html
<!DOCTYPE html>

<html>

<head>
<title>three little pigs</title>

</head>

<body>
<a href = 'https://github.com/'>世界最大同性恋交友网站</a>
<br>
<a href = '/add/4/5'>计算4+5</a>
</body>

</html>

#修改test_cal\urls.py文件
urlpatterns = [
    path('',cal_views.index,name = 'home'),
    path('admin/', admin.site.urls),
    path('add/',cal_views.add,name = 'add'),
    path('add/<int:a>/<int:b>',cal_views.add2,name = 'add2'),
]

在这里插入图片描述
我们计算加法的时候用的是 /add/4/5/ ,后来需求发生变化,比如改成 /4_add_5/,但在网页中,代码中很多地方都写死的 /add/4/5/,比如模板中可能是这么写的

<a href="/add/4/5/">计算 4+5</a>

如果这样写“死网址”,会使得在改了网址(正则)后,模板(template),视图(views.py,比如用于URL跳转),模型(models.py,获取记录访问地址等)用了此网址的,都必须进行相应的更改,修改的代价很大,一不小心,有的地方没改过来,就不能用了。

通过shell获取对应网址

reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。
在这里插入图片描述
在网页模板中也可以使用:

不带参数的:
{% url ‘name’ %}

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

例如:
<a href="{% url ‘add2’ 4 5 %}">link</a>

代码渲染最终页面是:

<a href="/add/4/5/">link</a>

这样当urls.py进行更改时,只要name参数不修改,所获取的网址也会动态地跟着变,当urls.py中关于add2的代码修改成:

path(‘new_add/int:a/int:b’,cal_views.add2,name = ‘add2’),

用在 views.pymodels.py 等地方的 reverse函数,同样会根据 name 对应的url获取到新的网址。想要改网址的时候,修改 urls.py 中的正则表达式部分(url 参数第一部分),name 不变的前提下,其它地方都不需要修改。

在这里插入图片描述

# 如何将老的URL跳转至新的网址?

#views.py
from django.urls import reverse
from django.http import HttpResponseRedirect

def old_add2_redirect(request,a,b):
    return HttpResponseRedirect(
    reverse('add2',args = (a,b))
    )

#urls.py
    path('new_add/<int:a>/<int:b>',cal_views.add2,name = 'add2'),
    path('add/<int:a>/<int:b>',cal_views.old_add2_redirect),
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值