Django&templates

本文介绍如何在Django项目中设置并使用模板功能,包括基本步骤如注册应用、渲染页面等,并分享了一些实用技巧,例如使用include和block来提高代码复用率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板使用的基本步骤如下

准备工作

想要使用Django的模板功能,首先需要将创建的app注册到settings.py的INSTALLED_APPS中

INSTALLED_APPS = (
## 自带的
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
## 添加自己的app
    'your_app_name',
)

用render渲染页面

打开app_name目录下的views.py

from django.shortcuts import render

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

在urls.py文件中注册url

## 引入app包中的views,此app的名字是leran
from learn import views as learn_views
urlpatterns = [
## name 可以用于在 templates, models, views ……中得到对应的网址,相当于“给网址取了个名字”,只要这个名字不变,网址变了也能通过名字获取到
    url(r'^$',learn_views.home,name='home'),
    url(r'^admin/', admin.site.urls),
]

启动服务器查看

python manage.py runserver

模板使用的一些技巧

使用include & block

网站设计一般有一些通用的部分,比如导航栏,底部,广告部分,Django中可以使用include和block将网页模板分成功能不同的几个板块
可以写一个通用的模板base.html,其他网页模板继承自这个模板

<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}默认标题{% endblock %}</title>
</head>
<body>

{% include 'nav.html' %}

{% block content %}
<div>这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。</div>
{% endblock %}

{% include 'bottom.html' %}

</body>
</html>

将导航栏单独的写在nav.html中,将底部单独写在bottom.html中,这些都是每个网页模板中可以复用的部分
比如写一个index.html

{% extends 'base.html'%}
{% block content%}
<div>Hello World!</div>
{% endblock%}

网页中使用字符串

views.py
往模板中传递一个名为string的字符串

def home(request):
    string = u'hello world!'
    return render(request,'home.html',{'string':string})

在模板中使用这个字符串

{{string}}

在模板中使用list和for

views.py
往模板中传递一个list

def home(request):
    mylist = ['python', 'java', 'r', 'c/c++']
    return render(request,'home.html',{'mylist':mylist})

在模板中使用

{% for item in mylist%}
{{item}}
{% endfor %}

使用字典

views.py

def home(request):
    mydict = {'name':'我的孙女叫小芳', 'id':'qq_14998713' }
    return render(request,'home.html',{'mylist':mylist})

在模板中使用

姓名:{{mydict.name}};ID:{{mydict.id}}
{% for k,v in mydict %}
{{k}}:{{v}}
{% endfor %}

如果list为空可以使用empty

<ul>
{% for item in mylist %}
    <li>{{ mylist.name }}</li>
{% empty %}
    <li>抱歉,列表为空</li>
{% endfor %}
</ul>

使用if

views.py

def home(request):
    mylist = map(str, range(10))
    return render(request,'home.html',{'mylist':mylist})

home.html

{% for i in mylist %}
{{i}}{% if not forloop.last %},{% endif %}
{% endfor %}

通过if语句去掉最后一个数字后面的逗号

forloop.last这个变量是循环最后一个为True,否则为False

变量描述
forloop.counter索引从 1 开始算
forloop.counter0索引从 0 开始算
forloop.revcounter索引从最大长度到 1
forloop.revcounter0索引从最大长度到 0
forloop.first当遍历的元素为第一项时为真
forloop.last当遍历的元素为最后一项时为真
forloop.parentloop用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

模板上得到视图对应的网址

# views.py
def add(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))


# urls.py
urlpatterns = patterns('',
    url(r'^add/(\d+)/(\d+)/$', 'app.views.add', name='add'),
)


# template html
{% url 'add' 4 5 %}
# or
<a href="{% url 'add' 4 5 %}">链接到:/add/4/5</a>

还可以使用 as 语句将内容取别名(相当于定义一个变量)

<a href="{{ the_url }}">链接到:{{ the_url }}</a>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值