这一节的内容基于上一节的代码,主要讲解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编码,运行时将出现以下报错:
在zqxt_views/urls.py的urlpatterns中添加路径:
path('', clac_views.index, name = 'home'),
运行服务器,访问http://127.0.0.1:8001/
上述代码中,我们在很多地方使用了网址,例如home.html中的
计算 4+5
如果需求变化修改网址(正则表达式),所有使用了使用了该网址的地方都需要进行修改,如templates,views,models等,十分麻烦。python提供了一种优雅的方法来解决这个问题。
在介绍这种方法之前先了解一下python代码是如何获取对应的网址的
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获取新的网址
在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