在本教程中,我们将详细了解 Django URL 映射以及如何链接 URL 请求和相应的视图。
我们将了解我们在第一篇文章中如何以及具体执行了哪些操作,以在本教程末尾输入的sayHello /页面上显示Django Hello World 。
让我们首先了解 Django URL 库。
Django URL 库的基础知识
在django.urls库中,我们有将在 Web 应用程序中使用的各种函数。让我们更多地了解他们。
1.路径(路线,视图,kwargs,名称)
该函数返回一个需要包含在 urlpatterns 中的元素。也就是说,路径充当元素(例如视图)与其 URL 之间的链接。
1. 路线
这是特定视图的 URL。例如:“<name>/”是一条路线。
因此,当我们从 URL 请求此页面时,服务器将返回链接到它的视图。
2.查看
这里我们需要写下我们需要链接的视图名称。或者使用“ include”函数添加另一个 urls.py 文件。(就像在project/urls.py文件中一样)
3. **kwargs 和 *args
python中函数定义中的args是用于变量输入参数列表的语法。
它与单个星号一起使用。
也就是说,如果我们需要为函数输入任意数量的参数,那么我们使用 *args。例如让我们看一个例子
def myFun( * args): for arg in args: print (arg) myFun( "Hello" , "There" , "Hi" , "There" ) |
所以在这里我们可以给出任意数量的参数,*args 将占用所有参数。我们可以认为所有参数都被 arg 保存为某个列表,因此使用 args 中的 arg 行,我们从列表中获取每个元素。
* 将列表拆分为元素,因此 *args 分别给出所有元素,而 args 将以列表形式给出元素。
所以如果你运行上面的代码,你会得到
Python 中函数定义中的kwargs用于关键字、变量参数列表。
它与双星号一起使用。
也就是说,例如,如果我们需要为函数输入任意数量的参数(关键字),那么我们使用 **kwargs。例如。让我们看一个例子,然后您会更清楚地了解关键字的确切含义
def myFun(**kwargs): for item,price in kwargs.items(): print(f"{item}={price}") myFun(Book=100,Pen=10,Watch=4000) |
正如您在上面的示例中看到的,我们能够传递完整的值。使用赋值运算符获得变量名和这些变量所保存的值。
我们可以认为参数被kwargs 保存为 Python 字典,因此通过使用 kwargs.items() 中的项目、价格行,我们将获取该项目(书、笔等)及其相应的价格( 100,10 等)。
** 将字典分割成它的元素。因此 **kwargs 分别为您提供所有关键字元素,而 kwargs 为您提供字典形式的关键字元素。
在 Django path() 中,如果我们需要将更多信息与 URL 路由一起发送到视图,我们可以使用 kwargs。
例如
path( 'name/<int:id>' ,views.name_id,{ "foo" : "bar" }) |
通过使用URL name/25,Django将调用views.name_id( request, id = 25, foo =’bar’)。
3.姓名
名称用于指定 URL 链接的特定视图的名称。
2. 包含(模块,命名空间=无)
此函数采用另一个 URL conf 文件,该文件应通过使用此包含函数来包含。也就是说,要与另一个urls.py 文件形成链接,您应该使用 include 函数。命名空间也可以写在里面,但我们现在不需要这样做。
如何将 URL 映射到 Django 中的视图?
这里我们使用 path() 函数和上面学到的语法:
path(‘ ’, sayHello, name = ‘sayHello’) |
这里sayHello是views.py中基于函数的视图名称。我们将路径保留为空白字符串,以便我们可以直接访问基本目录上的视图 –在我的例子中为http://127.0.0.1:8000/ 。
Django 项目中的 URL 映射
path ()函数将 URL 链接 到应用程序中存在的urls.py 文件。因此,我们需要使用上面学到的语法的include()函数。
例如,这里我们使用:
path(‘sayHello / ’,include(‘HellpWorldApp.urls’)) |
除了 路径和包含函数之外,还有re.path() 和 register_converter()函数,我们在 Python-Django 课程中不会太多使用它们。
注意:在project/urls.py中我们使用:
path(‘sayHello/’, include(HelloWorldApp.urls)), |
现在,即使我们在 app/urls.py 中编写 sayHello/并在 project/urls.py 中简单地编写“ ”,行为也会是相同的。
这是一个示例实现:
应用程序/urls.py:
path(‘sayHello/’, sayHello, name = ‘sayHello’) |
项目/urls.py:
path(‘ ’, include(HelloWorldApp.urls)) |
对于多个View,建议使用这种新方式。因此,从现在开始,我们将在 apps/urls.py 中保留端点,并在 project/urls.py 中保留“ ”(主机网站链接)。
因此,我们现在可以更改它们,如下图所示。
现在我们了解了路径并包含函数,让我们移动一个来创建多个视图并将它们链接到不同的端点。
Django URL 映射多个视图
正如我们在hello world 文章中所做的那样,我们将在views.py 中再添加一个视图。
让我们创建一个视图 Book。添加代码:
def Books(request): return HttpResponse( "This is a books webpage" ) |
对于较新的视图,我们需要创建另一个端点。因此,在apps/urls.py中,我们只需为端点“Books/”添加另一个路径
path( 'Books/' , Books,name = 'Books' ), |
现在让我们运行服务器并检查浏览器。
URL 映射 –可变端点
让我们创建一个视图,它接受图书 ID 作为请求,然后简单地返回给我们 ID 的行。
在views.py中,让我们创建另一个具有像‘Books/<number>’这样的端点的视图。
def BookID(request,bookid): return HttpResponse(f "The book Id is:{bookid}" ) |
在这里,我们只是将图书 ID 与请求一起获取,然后我们将返回特定于该特定图书的响应。
现在我们必须在 apps/urls.py 中添加端点。
path( 'Books/<int:bookid>' , BookID, name = 'BookID' ), |
这里我们不得不提到使用<int: bookid>所示的语法
让我们运行并检查
现在让我们运行浏览器并访问127.0.0.1:8000/Books/1
我们还可以检查任何其他随机图书 ID。
我们可以看到我们的网页正在运行。因此,我们现在可以使用上面的知识将任何视图与URL进行映射。
结论
这就是我们的结论。现在,是时候写下一篇文章了,其中讨论了 Django 视图以及更多关于我们在views.py中实际所做的事情。请继续关注 未来几天有关Python Django 和 Flask的更多文章!