URL映射
视图写完后,要与URL进行映射,也即用户在浏览器中输入什么 url 的时候可以请求到这个视图函 数。在用户输入了某个 url ,请求到我们的网站的时候, django 会从项目的 urls.py 文件中寻找对应 的视图。在 urls.py 文件中有一个 urlpatterns 变量,以后 django 就会从这个变量中读取所有的匹配 规则。匹配规则需要使用 django.urls.path 函数进行包裹,这个函数会根据传入的参数返回 URLPattern 或者是 URLResolver 的对象。
urlpatterns = [
# path("admin/", admin.site.urls),
path('index/',views.index),
path('user/list/',views.user_list),
path('user/add/',views.user_add),
path('book',views.book_detail_string),
path('book/<int:book_id>',views.book_detail_path)
]
URL中添加参数
比如简书某篇文章的详情页的url,是 https://www.jianshu.com/p/a5aab9c4978e 后面的 a5aab9c4978e 就是这篇文章的 id ,那么简书的 文章详情页面的url就可以写成 https://www.jianshu.com/p/ ,其中id就是文章的id。那么如何在 django 中实现这种需求呢。这时候我们可以在 path 函数中,使用尖括号的形式来定义一个参数。比如 我现在想要获取一本书籍的详细信息,那么应该在 url 中指定这个参数。
urls.py的代码如下:
urlpatterns = [
# path("admin/", admin.site.urls),
path('index/',views.index),
path('user/list/',views.user_list),
path('user/add/',views.user_add),
path('book',views.book_detail_string),
path('book/<int:book_id>',views.book_detail_path)
]
views.py的代码如下:
def book_detail_string(request):
book_id = request.GET.get('id')
name = request.GET.get('name')
return HttpResponse(f"您查找的图书id是:{book_id},图书名称是:{name}")
def book_detail_path(request,book_id):
return HttpResponse(f"您查找的bookid是{book_id}")
1.book_detail_string
函数:
- 它通过查询字符串(Query String)来接收参数。查询字符串是URL中
?
后面的部分,例如http://example.com/books?id=123&name=Python
。 - 函数使用
request.GET.get('id')
和request.GET.get('name')
来获取查询字符串中的id
和name
参数。 - 如果请求中没有提供这些参数,
get
方法将返回None
2.
book_detail_path
函数:
- 它通过URL路径来接收参数。路径参数是在URL的路径部分指定的,例如
http://example.com/books/123
,其中123
是一个路径参数。 - 函数定义中的
book_id
参数将自动从URL的路径中获取相应的值。 - 这种方式通常需要在Django的URL配置中指定,例如使用
path('books/<int:book_id>/', views.book_detail_path, name='book_detail')
来定义URL模式。
实现结果如下: