Django 模板进阶

本节主要讲 Django模板中的循环,条件判断,常用的标签,过滤器的使用。

  • 列表,字典,类的实例的使用
  • 循环:迭代显示列表,字典等中的内容
  • 条件判断:判断是否显示该内容,比如判断是手机访问,还是电脑访问,给出不一样的代码。
  • 标签:for,if 这样的功能都是标签。
  • 过滤器:管道符号后面的功能,比如{{ var|length }},求变量长度的 length 就是一个过滤器。

其实,用户访问URL到显示内容到网页上,基本流程是:在url.py先登记 要访问的是哪个视图的函数,然后在view.py里面定义函数内容,再根据函数去模板找到对应的字段,填充数据,然后渲染到网页。

 

home.html内容如下:

一般的变量之类的用 {{ }}(变量),功能类的,比如循环,条件判断是用 {%  %}(标签)

{% extends 'base.html' %}
 
{% block title %}
欢迎光临首页
{% endblock %}

{% block content %}
{% include 'ad.html' %}
<h3>这里"http://127.0.0.1:8000/home/"访问后得到的网页内容</h3>

<!--home2-->
<p>home2</p>
{{ string }} 


<!--home3-->
<p>home3</p>
{% for i in TutorialList %}
<li> {{ i }} </li>
<br>
{% endfor %}<!--#for 循环要有一个结束标记-->

<!--home4-->
<p>home4</p>
站点:{{ info_dict.site }} 内容:{{ info_dict.content }}
<br>
{% for key, value in info_dict.items %}
    {{ key }}: {{ value }}
{% endfor %}


<!--home5-->
<p>home5 带逗号结尾</p>
{% for item in List %}
    {{ item }}, 
{% endfor %}


<p>home6 不带逗号结尾</p>
<!--用变量 forloop.last 这个变量,如果是最后一项其为真,否则为假,更改如下:  -->
{% for item in List2 %}
    {{ item }}{% if not forloop.last %},{% endif %} 
{% endfor %}


<p>home7 遍历list输出其中某个字段</p>
<!--当列表中可能为空值时用 for  empty-->
<ul>
    {% for athlete in athlete_list %}
        <li>{{ athlete.name }}</li>
    {% empty %}
        <li>抱歉,列表为空</li>
    {% endfor %}
</ul>

{% endblock %}

 对于模板的嵌套不是很理解的,建议先看一下:https://blog.csdn.net/hellokandy/article/details/90644532

在for循环中还有很多有用的东西,如下:

 

views.py内容如下:

# coding:utf-8
from django.http import HttpResponse
from django.shortcuts import render


def index(request):
    return HttpResponse(u"<h1> Django test! <h1>")

def add(request):
    a = request.GET['a']
    b = request.GET['b']
    c = request.GET.get('c', 0) #推荐写法,当没有传递c 的时候默认c 为 0
    ret = int(a) + int(b) + int(c)
    return HttpResponse("a+b+c= " + str(ret))


def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse("add2: a+b= " + str(c))


def home(request):
    return render(request, 'home.html')


'''实例一,显示一个基本的字符串在网页上'''
def home2(request):
    string = u"欢迎使用django搭建自己的网站!"
    return render(request, 'home.html', {'string': string})


'''实例二,讲解了基本的 for 循环 和 List内容的显示'''
def home3(request):
    TutorialList = ["HTML", "CSS", "jQuery", "Python", "Django"]
    return render(request, 'home.html', {'TutorialList': TutorialList})


'''实例三,显示字典中内容:'''
def home4(request):
    info_dict = {'site': u'自强学堂', 'content': u'各种IT技术教程'}
    return render(request, 'home.html', {'info_dict': info_dict})


'''实例四,在模板进行 条件判断和 for 循环的详细操作:'''
def home5(request):
    List = map(str, range(20))# 一个长度为20的 List
    return render(request, 'home.html', {'List': List})


'''实例五,在模板进行 条件判断和 for 循环的详细操作:'''
def home6(request):
    List = map(str, range(20))# 一个长度为20的 List
    return render(request, 'home.html', {'List2': List})


'''实例六,在模板进行 条件判断和 for 循环的详细操作:'''
def home7(request):
    athlete_list = [
        {'name': u'kandy', 'content': u'各种IT技术教程'},
        {'name': u'', 'content': u'各种IT技术教程'},
        {'name': u'chen', 'content': u'各种IT技术教程'},
        {'name': u'zoory', 'content': u'各种IT技术教程'},
        {'name': u'hannah', 'content': u'各种IT技术教程'}
    ]
    return render(request, 'home.html', {'athlete_list': athlete_list})

url.py内容如下:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url
from learn import views as learn_views  # add



urlpatterns = [
    path('home/', learn_views.home, name='home'),
    path('home2/', learn_views.home2, name='home2'),
    path('home3/', learn_views.home3, name='home3'),
    path('home4/', learn_views.home4, name='home4'),
    path('home5/', learn_views.home5, name='home5'),
    path('home6/', learn_views.home6, name='home6'),
    path('home7/', learn_views.home7, name='home7'),
    path('', learn_views.index),  # add
    path('add/', learn_views.add, name='add'),  # new
    path('add/<int:a>/<int:b>/', learn_views.add2, name='add2'),  # new + 1    
    path('admin/', admin.site.urls),
]

在浏览器输入:http://127.0.0.1:8000/home#

#:代表1-7,查看网页输出结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellokandy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值