url标签使用详解:
在模版中,我们经常要写一些 url ,比如某个 a 标签中需要定义 href 属性。当然如果通过硬编码的方式直接将这个 url 写死在里面也是可以的。但是这样对于以后项目维护可能不是一件好事。因此建议使用这种反转的方式来实现,类似于 django 中的 reverse 一样。示例代码如下:
<a href="{% url 'book:list' %}">图书列表页面</a>
如果 url 反转的时候需要传递参数,那么可以在后面传递。但是参数分位置参数和关键字参数。位置参数和关键字参数不能同时使用。示例代码如下:
# path部分 path('detail/<book_id>/',views.book_detail,name='detail') # url反转,使用位置参数 <a href="{% url 'book:detail' 1 %}">图书详情页面</a> # url反转,使用关键字参数 <a href="{% url 'book:detail' book_id=1 %}">图书详
如果想要在使用 url 标签反转的时候要传递查询字符串的参数,那么必须要手动在在后面添加。示例代码如下:
<a href="{% url 'book:detail' book_id=1 %}?page=1">图书详情页面</a>
如果需要传递多个参数,那么通过空格的方式进行分隔。示例代码如下:
<a href="{% url 'book:detail' book_id=1 page=2 %}">图书详情页面</a>
实例代码如下:
index.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul> <li><a href="/">首页</a></li> <li><a href="{% url 'book' %}">书籍</a></li> <li><a href="{% url 'city' %}">城市</a></li> {# 多个参数就是使用空格分开 #} <li><a href="{% url 'movie' myid='5' youid='8' %}">电影</a></li> {# 查询字符串只能在后添加 例如: ?next=/ #} <li><a href="{% url 'login' %}?next=/">登陆</a></li> </ul> </body> </html>
views.py:
# -*- coding: utf-8 -*- from django.shortcuts import render from django.http import HttpResponse def index(request): return render(request, 'index.html') def book(request): return HttpResponse('书籍') def login(request): next = request.GET.get('next') text = '你输入的url是:%s' % next return HttpResponse(text) def city(request): return HttpResponse('城市') def movie(request, myid, youid): text = '你输入的电影分类是:%s; %s' % (myid, youid) return HttpResponse(text)
urls.py:
from django.urls import path from . import views urlpatterns = [ path('', views.index, name='index'), path('book/', views.book, name='book'), path('city/', views.city, name='city'), path('movie/<myid>/<youid>/', views.movie, name='movie'), path('login/', views.login, name='login'), ]