[django学习笔记](四)Django URL name详解

这一节的内容基于上一节的代码,主要讲解url中name的用处


4-1 url name 详解

在clac/views.py添加一个index的函数

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

在zqxt_views/settings.py的INSTALLED_APPS添加'clac'

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    # my apps
    'clac',
]

添加后在使用render的时候,django会自动找到INSTALLED_APPS中各个app下的templates的文件夹

在clac中创建一个templates文件夹,在templates中新建一个home.html

先新建一个文本文档,输入以下内容




    自强学堂


 
计算 4+5
 


点击另存为,属性选择所有文件,在名称后添加后缀.html,编码方式选择utf-8


html默认以asci的编码方式存储,如果没有选择utf-8编码,运行时将出现以下报错:

[django学习笔记](四)Django URL name详解_第1张图片


在zqxt_views/urls.py的urlpatterns中添加路径:

path('', clac_views.index, name = 'home'),

运行服务器,访问http://127.0.0.1:8001/

[django学习笔记](四)Django URL name详解_第2张图片

上述代码中,我们在很多地方使用了网址,例如home.html中的

计算 4+5

如果需求变化修改网址(正则表达式),所有使用了使用了该网址的地方都需要进行修改,如templates,views,models等,十分麻烦。python提供了一种优雅的方法来解决这个问题。

在介绍这种方法之前先了解一下python代码是如何获取对应的网址的

[django学习笔记](四)Django URL name详解_第3张图片

reverse()接受url中的name那么作为第一个参数,其作用是获取对应的网址,这个网址可以用来跳转,也可以用来计算相关页面的地址,只要对应的url中的name不变,就不需要修改代码中的网址

在网页模板中可以很方便的使用:

{% url 'name' %} #不带参数
{% url 'name' 参数 %}#带参数的,参数可以是变量名

例如:

link

这样渲染的最终页面是

link

即使urls.py进行了更改,只要不改变name,获取的网址也会动态的跟着改变

例如add的改为new_add:

path('new_add///', clac_views.add2, name = 'add2')

最终渲染的对应网址是/new_add/4/5

在view和model等地方的reverse函数y二回同样根据那么对应的url获取新的网址


4-2 如何自动跳转到新网址

在view.py 添加一个跳转函数

from django.http import HttpResponseRedirect

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

在urls.py 中:

path('new_add///', clac_views.add2, name = 'add2'),
path('add///', clac_views.old_add2_redirect),
这样当访问/add/4/5/时,自动跳转到新的/new_add/4/5/



课程链接:https://code.ziqiangxuetang.com/django/django-url-name.html



你可能感兴趣的:(django学习)