DTL语言学习(三){% with %}标签和{% url %}标签的使用

{% with %}标签的使用

首先新建一个测试环境。
新建一个项目,然后创建一个with_demo的app,在app中创建urls.py的文件,再创建一个templates的文件夹,在templates中再创建一个with.html的文件。
然后将所有的配置都配置好,即添加url,添加app至settings.py中等等。
直到能正常访问到with.html这个文件时就配置完成了。

然后就是编写测试代码了:
首先在views中写入以下代码:

from django.shortcuts import render

# Create your views here.
def index(request):
    persion = ['张三','李四','王五']
    return render(request,'with.html',{'perison':persion})

然后在with.html中接收传入的数据,在body中写入以下代码:

<p>{{ perison.0 }}</p>
<p>{{ perison.1 }}</p>
<p>{{ perison.2 }}</p>

查看效果
DTL语言学习(三){% with %}标签和{% url %}标签的使用
接下来我们使用with标签进行操作。
with.html中body中修改代码为:

<p>{{ perison.0 }}</p>
<p>{{ perison.1 }}</p>
<p>{{ perison.2 }}</p>
<hr>

{% with per=perison  %}
    <p>{{ per.0 }}</p>
    <p>{{ per.1 }}</p>
    <p>{{ per.2 }}</p>
{% endwith %}

效果图为
DTL语言学习(三){% with %}标签和{% url %}标签的使用
这样我们就是用{% with %}标签定义了一个变量。
{% with %}标签还有一个用法
在html中继续修改代码:

<p>{{ perison.0 }}</p>
<p>{{ perison.1 }}</p>
<p>{{ perison.2 }}</p>
<hr>

{% with per=perison  %}
    <p>{{ per.0 }}</p>
    <p>{{ per.1 }}</p>
    <p>{{ per.2 }}</p>
{% endwith %}

<hr>

{% with perison as pers %}
    <p>{{ pers.0 }}</p>
    <p>{{ pers.1 }}</p>
    <p>{{ pers.2 }}</p>
{% endwith %}

这样,我们也能得到persion中的值。

注意:

  1. 使用xxx=xxx这种方法时,=两边不能有空格,否则Django会不能识别。
  2. {% with %}定义的变量只在当前的{% with %}标签下才有用,在另外的地方将不能识别。

{% url %}标签的使用

在刚才的项目中继续新建一个url_demo的app,在app中创建urls.py的文件,再创建一个templates的文件夹,在templates中再创建一个url.html的文件。
然后将所有的配置都配置好,即添加url,添加app至settings.py中等等。
直到能正常访问到with.html这个文件时就配置完成。

简单的{% url %}使用

编写views中的代码:

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request,'url.html')

def book(request):
    return HttpResponse('读书首页')

def movie(request):
    return HttpResponse('电影首页')

def city(request):
    return HttpResponse('同城首页')

这个app中urls.py中的代码:

from django.urls import path
from . import views

app_name = 'url'

urlpatterns = [
    path('',views.index,name = 'index'),
    path('book/',views.book,name = 'book'),
    path('movie/',views.movie,name = 'movie'),
    path('city/',views.city,name = 'city'),
]

url.html中body中的代码:

<a href="{% url 'url:index' %}">首页</a><br>
<a href="{% url 'url:book' %}">读书</a><br>
<a href="{% url 'url:movie' %}">电影</a><br>
<a href="{% url 'url:city' %}">同城</a><br>

这样,我们就用{% url %}标签成功的进行了链接。

{% url %}传递参数

views中添加一个函数

def book_detail(request,book_id):
    text = "最火的一片文章ID是: %s" % book_id
    return HttpResponse(text)

urls.py中添加映射:

path('book/detail/<int:book_id>',views.book_detail,name = 'book_detail')

url.html中添加一个标签

<a href="{% url 'url:book_detail' 6 %}">最火的一篇文章</a><br>

这样,我们就实现了对{% url %}标签传入参数的值了。

使用{% url %}标签传递查询字符窜时,就必须手动的在后面添加。示例代码。
views中添加一个login函数

def login(request):
    url = request.GET.get('next')
    text = "登录页面,登录之后你将要跳转的页面是: %s" % url
    return HttpResponse(text)

urls.py中配置路径

    path('login/',views.login,name = 'login')

url.html中添加标签

<a href="{% url 'url:login' %}?next=city">登录</a>

这样就能实现{% url %}标签传递查询字符窜的操作了。
如果需要传递多个参数,只需要继续在后面添加参数就行了,示例:
修改views中的book_detail函数,接收两个参数:

def book_detail(request,book_id,category):
    text = "最火的一片文章ID是: %s  种类是: %s" % (book_id,category)
    return HttpResponse(text)

urls.py中修改对应路径增加参数

    path('book/detail/<int:book_id>/<category>/',views.book_detail,name = 'book_detail'),

url.html中修改标签

<a href="{% url 'url:book_detail' book_id=6 category='小说' %}">最火的一篇文章</a><br>
{#<a href="{% url 'url:book_detail' 6 '小说' %}">最火的一篇文章</a><br>#}

注:

  1. 上面两种写法都是可以的,具体使用那一种就看自己的心情了。
  2. =两边不能有空格,否者会报错。