url映射:
1,为什么Django中的所有url都写在urls.py文件中呢,又为什么Django 又会去urls.py中寻找映射呢?
因为在‘settings.py’文件中配置了’ROOT_URLCONF’为‘urls.py’。所以Django会去urls.py中寻找,而且我们也必须把所有的url写在urls.py文件中。
2,在’url.py’中所有的映射,都应该放在‘urlpatterns’这个列表中。
3,所有的映射不是随便写的,而是用‘path‘函数或者是’re_path’函数进行包装的。
url传参数:
1,url中使用变量的方式:在path的第一个参数中,使用==<参数名>==的方式可以传递参数。然后在views.py文件中的函数也要对应参数。
注意:views.py文件中的参数必须和url中的参数名称保持一致,否则会找不到参数。另外,url中是可以传递多个参数的。
示例代码:
views.py文件中
from django.http import HttpResponse
def book_detail(request,book_id):
text = "你获取的图书id是:%s" % book_id
return HttpResponse(text)
urls.py文件中:
from django.urls import path
from book import views
urlpatterns = [
path('book/detail/<book_id>',views.book_detail),
]
在浏览器中输入下面网址查看效果。
http://127.0.0.1:8000/book/detail/10
最后面的数值就是传递的参数,是可以随便改的。
2,采用 查询字符窜 的方式:在url中不需要单独写匹配查询字符窜的那部风,只需要在输入输入网址的时候最后面输入 ?参数名=参数值,中间也不能有空格,否则会获取不到想要获取的值。在views.py中的函数使用 request.GET.get('参数名称')
或者request.GET.[参数名称]
来获取
示例代码如下:
views.py中的代码
from django.http import HttpResponse
def author_detail(request):
#author_id = request.GET['id'] 两种方法获取参数
author_id = request.GET.get('id')
text = "作者的id是: %s" % author_id
return HttpResponse(text)
urls.py中的代码
from django.urls import path
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/author/',views.author_detail)
]
运行项目,在浏览器中输入
http://127.0.0.1:8000/book/author/?id=10
就能够看到效果了,id后面的值也是可以改变的。