分组
分组的目的:让服务端获得url中的具体数据,通过分组,把需要的数据按函数传参的方式传递给服务器后台
1-无名分组
若要从URL 中捕获一个值,只需要在它周围放置一对圆括号
# app01/urls.py from django.urls import path, re_path from app01 import views app_name = "app01" urlpatterns = [ path("login/", views.login, name="Log"), re_path(r"articles/([0-9]{4})/([0-9]){2}/", views.articles), ]
# app01/views.py def articles(request, year, month ): print(year, month) return HttpResponse(year+"-"+month)
2-有名分组
在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。
在Python 正则表达式中,命名正则表达式组的语法是("htmlcode">
# app01/urls.py from django.urls import path, re_path from app01 import views app_name = "app01" urlpatterns = [ path("login/", views.login, name="Log"), re_path(r"articles/(", views.articles), ]
捕获的值作为关键字参数而不是位置参数传递给视图函数
# app01/views.py def articles(request, month, year ): print(year, month) return HttpResponse(year+"-"+month)
分发
分发的目的:解决一个django项目中因为存在多个应用app导致project下面的urls臃肿和分配混乱的问题
分发的具体操作流程是:
step1:项目文件下的urls.py,使用include()
# project/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path(r"app01/", include("app01.urls")), ]
step2:app下的具体url
# app01/urls.py from django.urls import path from app01 import views urlpatterns = [ path("login/", views.login), ]
step3:视图函数render时模板路径前缀
# app01/views.py from django.shortcuts import render # Create your views here. def login(request): return render(request, "app01/login.html")
step4:模板
# app01/templates/app01/login.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>app01_title</title> </head> <body> <h2>app01_login</h2> <hr> <form action="" method="post"> <p>用户名 <input type="text" name="name"></p> <p>密码 <input type="password" name="pwd"></p> <p><input type="submit" value="登录"></p> </form> </body> </html>
反向解析
反向解析的目的:解决url硬编码的问题,即不能写死一个url,否则日后修改url,造成的维护成本巨大
此时可以给url命名,然后可以在视图和模板中使用url别名,反向解析出正式的url
反向解析分两种:模板中解析、视图中解析
模板中解析 <form action="{% url "Art" 12 %}" method="post">
# app01/urls.py from django.urls import path from app01 import views urlpatterns = [ path("login/", views.login, name="Log"), path("articles/<int:id>/", views.articles, name="Art"), #有参 ]
# app01/templates/app01/login.html <form action="{% url "Log" %}" method="post"> <p>用户名 <input type="text" name="name"></p> <p>密码 <input type="password" name="pwd"></p> <p><input type="submit" value="登录"></p> </form> <form action="{% url "Art" 12 %}" method="post"> <p>用户名 <input type="text" name="name"></p> <p>密码 <input type="password" name="pwd"></p> <p><input type="submit" value="登录"></p> </form>
视图中解析 reverse("Art", args=(id,))
# app01/views.py from django.shortcuts import render from django.urls import reverse # Create your views here. def login(request): print(reverse('log')) id=10 print(reverse("Art", args=(id,))) return render(request, "app01/login.html")
命名空间
命名空间要配合反向解析使用,当存在多个app,url的name冲突时,需要指定该name的命名空间
# project/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path(r"app01/", include("app01.urls", namespace="app01")), path(r"app02/", include("app02.urls", namespace="app02")), ]
在django2.x中,app01/url.py需要添加 app_name = "app01"
# app01/urls.py from django.urls import path from app01 import views app_name = "app01" urlpatterns = [ path("login/", views.login, name="Log"), ]
# app01/views.py(需要时设置) from django.shortcuts import render from django.urls import reverse # Create your views here. def login(request): a = reverse("app01:Log") print("app01:", a) return render(request, "app01/login.html")
# app01/templates/app01/login.html(需要时设置) <form action="{% url "app01:Log" %}" method="post"> <p>用户名 <input type="text" name="name"></p> <p>密码 <input type="password" name="pwd"></p> <p><input type="submit" value="登录"></p> </form>
转换器
对于django2.0版本以后,出现新的path() urlconf,他有两个好处:
1:url修改维护变得简单
2:url获得的参数的数据类型不再是单纯的str,在path中可以通过转换器实现参数数据类型的转换
path()中存在5个内置转化器:
=1. str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
2. int,匹配正整数,包含0。
3. slug,匹配字母、数字以及横杠、下划线组成的字符串。
4. uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
5. path,匹配任何非空字符串,包含了路径分隔符
使用方法:
step1: app01/urls.py
from django.urls import path, re_path from app01 import views app_name = "app01" urlpatterns = [ path("login/", views.login, name="Log"), # re_path(r"articles/(", views.articles), path("articles/<int:year>/<int:month>/", views.articles), ]
step2: app01/views.py
def articles(request, year, month): print(year, month) print(type(year)) return HttpResponse("ok")
- <int: year> 相当于re_path()中的 ("htmlcode">
class YearConverter: regex = '[0-9]{4}' def to_python(self, value): return int(value) def to_url(self, value): return '%04d' % value
step2: app01/urls.py
from django.urls import path, re_path, register_converter from app01 import views, my_converters register_converter(my_converters.YearConverter, 'year') app_name = "app01" urlpatterns = [ path("login/", views.login, name="Log"), # re_path(r"articles/(", views.articles), # path("articles/<int:year>/<int:month>/", views.articles), path("books/<year:y>", views.books), ]
step3: app01/views.py
def books(request, y): print(y, type(y)) return HttpResponse("ok,books")
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]