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'),
]
12-14 07:19