Django web框架使用url path name详解

yipeiwu_com6年前Python基础

quicktool/view.py文件修改视图函数index(),渲染一个home.html模板

from django.shortcuts import render
def index(request):
  return render(request, 'home.html')

quicktool(应用app)下创建一个templates文件夹(模板),在templates下创建一个home.html

<!DOCTYPE html>
<html>
<head>
  <title>学习Django</title>
</head>
<body>

<a href="/add2/4/5/" rel="external nofollow" rel="external nofollow" >计算 4+5</a>

</body>
</html>

mytestsite/urls.py文件将视图函数index()对应的网址取名name为home(只要这个名字不变,网址变了也能通过名字获取到)

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', quicktool_views.index, name='home'), # 新增name值
  path('add/', quicktool_views.add, name='add'), # 新增
  path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'),  # 新增
]

运行开发服务器,访问http://127.0.0.1:8000/,可以看到

点击标签a会执行脚本进行计算,但是home.html中代码a标签的url是"写死"的,我们可以通过url的name传参,home.html增加以下代码

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

<a href="/add2/4/5/" rel="external nofollow" rel="external nofollow" >计算 4+5</a>
<a href="{% url 'add2' 70 80 %}" rel="external nofollow" >计算 70+80</a>  # 新增

运行开发服务器,访问http://127.0.0.1:8000/,可以看到

点击第一个a标签跳转请求的url为http://127.0.0.1:8000/add2/4/5/

点击第二个a标签跳转请求的url为http://127.0.0.1:8000/add2/70/80/

第二个a标签的写法是根据url name 值传参进行跳转,即根据mytestsite/urls.py文件的url path()的属性值name匹配,再传相应的参数值,进行"不写死"请求。

在url path()的属性值name不修改的前提下,修改url path()的第一个路径参数,那么a标签获取的网址也会动态相应变化。

比如

path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), 

改成

path('add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), 

除此,还需要写一个跳转到新地址的函数,Django并不会自动更新跳转地址

例如旧的地址收藏夹为/add2/4/5/,访问时就会自动跳转到新的/new_add2/4/5/

具体操作是,在quicktool/view.py文件写一个跳转函数

from django.shortcuts import render
from django.http import HttpResponseRedirect
def old_add2_redirect(request, a, b):
  return HttpResponseRedirect(
    reverse('add2', args=(a, b))
  )

mytestsite/urls.py文件新增url

path('new_add2/<int:a>/<int:b>/', quicktool_views.add2, name='add2'), # 新地址
path('add2/<int:a>/<int:b>/', quicktool_views.old_add2_redirect),  # 旧地址

访问http://127.0.0.1:8000/,刷新后,可以看到

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

对pandas中apply函数的用法详解

对pandas中apply函数的用法详解

最近在使用apply函数,总结一下用法。 apply函数可以对DataFrame对象进行操作,既可以作用于一行或者一列的元素,也可以作用于单个元素。 例:列元素 行元素 列 行...

Python如何筛选序列中的元素的方法实现

本篇文章给大家带来的内容是关于Python如何筛选序列中的元素 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、需求 序列中含有一些数据,我们需要提取其中的值或...

Python制作简易注册登录系统

Python制作简易注册登录系统

这次我主要讲解如何用Python基于Flask的登录和注册,验证方式采用Basic Auth 主要用以下库 import os #Flask的基础库 from flask imp...

Python实现微信翻译机器人的方法

Python实现微信翻译机器人的方法

相信大家在日常学习或者是阅读英文文章的过程中,难免会出现几个不认识的单词,或者想快速翻译某段英文的意思。 今天,利用Python爬虫等知识,教大家打造一个微信下的翻译小助手。好吧,开始干...

pandas中read_csv的缺失值处理方式

今天遇到的问题是,要将一份csv数据读入dataframe,但某些列中含有NA值。对于这些列来说,NA应该作为一个有意义的level,而不是缺失值,但read_csv函数会自动将类似的缺...