1. Django URL配置
Django的URL配置非常重要,它可以把不同的URL请求映射到相应的视图函数中去,然后在视图函数中根据业务逻辑来处理请求并返回响应结果。在项目开发中,我们往往需要对多个URL进行配置,这时候就需要使用到Django的URL路由分发来完成这个任务。
1.1 URL Patterns
URL模式是Django中的基本概念,它用于指定URL地址和对应的处理函数的映射关系。我们可以在Django的应用程序的urls.py模块中定义URL模式。
from django.urls import path
from . import views
urlpatterns = [
path('home/', views.home_view),
path('about/', views.about_view),
path('contact/', views.contact_view),
]
以上代码中,我们通过导入path函数和views模块,定义了三个URL模式,分别对应了home、about和contact三个地址。这些URL模式都调用了views模块中定义的相应函数。例如,在请求home地址时,Django会调用views.home_view函数来处理该请求。
1.2 URL绑定
为了使Django能够正确地处理来自HTTP客户端的请求,我们需要将URL模式通过urlpatterns列表绑定到应用程序中。我们可以在项目的urls.py文件中导入include函数,然后将应用程序的urlpatterns列表添加到项目的urlpatterns列表中。
from django.urls import path, include
urlpatterns = [
path('books/', include('books.urls')),
path('music/', include('music.urls')),
]
以上代码中,我们使用了include函数将两个应用程序books和music的URL模式绑定到项目的urlpatterns列表中。
1.3 URL逆向解析
Django还提供了非常方便的URL逆向解析功能,它可以将视图函数和URL模式之间的关系变为双向联系,这样我们在编写模板时就可以使用逆向解析来生成URL地址。逆向解析的方法是使用reverse函数,在视图函数中通过reverse函数生成相应的URL地址,然后将其传递到模板中。
2. URL参数传递
有时候,我们需要从客户端传递参数到服务器端,以便视图函数根据参数进行不同的处理。Django提供了非常方便的方式来实现URL参数传递,我们可以将参数通过URL的查询字符串传递,也可以将参数作为URL的一部分进行传递。
2.1 查询字符串传递参数
查询字符串是指URL中的?后面跟着的一组参数说明。例如,访问如下URL时:
http://example.com/search/?q=Django&cat=Web
则?后面的q=Django&cat=Web就是查询字符串,它包含了两个参数q和cat的值,分别为Django和Web。我们可以在视图函数中使用Django的request对象的GET属性来获取查询字符串的参数值。
def search(request):
query = request.GET.get('q', '')
category = request.GET.get('cat', '')
return HttpResponse('You searched for "%s" in category "%s".' % (query, category))
以上视图函数中,我们使用request.GET.get('q', '')来获取查询字符串中的q参数的值,如果没有提供该参数,则默认为'',类似地,我们也获取了cat参数的值。
2.2 URL路径传递参数
除了查询字符串之外,我们也可以将参数作为URL路径的一部分进行传递。例如,访问如下URL时:
http://example.com/blog/2018/03/01/my-post/
我们可以看到,URL中包含了3个参数,分别为年份、月份和文章标题。我们可以在URL模式中使用尖括号<>来捕获这些参数,并将其传递给视图函数。
from django.urls import path
from . import views
urlpatterns = [
path('blog////', views.blog_view),
]
在以上的URL模式中,我们通过
def blog_view(request, year, month, title):
return HttpResponse('You requested the blog post "%s/%s/%s".' % (year, month, title))
在以上的视图函数中,我们根据参数的值来处理请求,并返回相应的响应结果。
3. URL命名
在Django中,我们可以为URL命名,这样在编写模板时就可以使用这些命名来生成URL地址,而不用逐个指定URL模式的名称。为URL命名的方法是在URL模式中使用name参数来指定名称。
from django.urls import path
from . import views
urlpatterns = [
path('blog////', views.blog_view, name='blog'),
]
在以上的URL模式中,我们为该URL命名为blog,然后就可以在模板中使用这个命名来生成URL地址,方法是使用url模板标签。
{% url 'blog' year=2018 month=3 title='my-post' %}
以上代码中,我们使用url标签来生成URL地址,其中'blog'是URL模式的名称,year、month和title是该URL模式捕获的参数的名称和值。