07 Django 模板

news/2024/7/5 7:00:32

在前面的几节中我们都是用简单的 django.http.HttpResponse 来把内容显示到网页上,本节将讲解如何使用渲染模板的方法来显示内容。

1、在views里写一个首页的视图

from django.shortcuts import render

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

2、templates 文件夹,里面新建一个 home.html

3、将视图函数对应到网址,修改urls.py文件

完成以上3步即可实现模板显示。

4、创建数据库表

python manage.py migrate

创建数据库虽然本节不会用到,但是可以让一些提示消失(提示你要创建数据库之类的)

5、运行开发服务器,看看效果

python manage.py runserver

 

模板补充知识:

网站模板的设计,一般的,我们做网站有一些通用的部分,比如 导航,底部,访问统计代码等等

nav.html, bottom.html, tongji.html

可以写一个 base.html 来包含这些通用文件(include)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
< html >
< head >
     < title >{% block title %}默认标题{% endblock %} - 自强学堂</ title >
</ head >
< body >
 
{% include 'nav.html' %}
 
{% block content %}
< div >这里是默认内容,所有继承自这个模板的,如果不覆盖就显示这里的默认内容。</ div >
{% endblock %}
 
{% include 'bottom.html' %}
 
{% include 'tongji.html' %}
 
</ body >
</ html >

如果需要,写足够多的 block 以便继承的模板可以重写该部分,include 是包含其它文件的内容,就是把一些网页共用的部分拿出来,重复利用,改动的时候也方便一些,还可以把广告代码放在一个单独的html中,改动也方便一些,在用到的地方include进去。其它的页面继承自 base.html 就好了,继承后的模板也可以在 block 块中 include 其它的模板文件。

比如我们的首页 home.html,继承或者说扩展(extends)原来的 base.html,可以简单这样写,重写部分代码(默认值的那一部分不用改)

1
2
3
4
5
6
7
8
{% extends 'base.html' %}
 
{% block title %}欢迎光临首页{% endblock %}
 
{% block content %}
{% include 'ad.html' %}
这里是首页,欢迎光临
{% endblock %}

注意:模板一般放在app下的templates中,Django会自动去这个文件夹中找。但 假如我们每个app的templates中都有一个 index.html,当我们在views.py中使用的时候,直接写一个 render(request, 'index.html'),Django 能不能找到当前 app 的 templates 文件夹中的 index.html 文件夹呢?(答案是不一定能,有可能找错)

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates 文件夹中找(而不只是当前 app 中的代码只在当前的 app 的 templates 文件夹中找)。各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。这样设计有利当然也有弊,有利是的地方是一个app可以用另一个app的模板文件,弊是有可能会找错了。所以我们使用的时候在 templates 中建立一个 app 同名的文件夹,这样就好了。

这就需要把每个app中的 templates 文件夹中再建一个 app 的名称,仅和该app相关的模板放在 app/templates/app/ 目录下面,

例如:项目 zqxt 有两个 app,分别为 tutorial 和 tryit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
zqxt
├── tutorial
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── templates
│   │   └── tutorial
│   │       ├── index.html
│   │       └── search.html
│   ├── tests.py
│   └── views.py
├── tryit
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── templates
│   │   └── tryit
│   │       ├── index.html
│   │       └── poll.html
│   ├── tests.py
│   └── views.py
├── manage.py
└── zqxt
     ├── __init__.py
     ├── settings.py
     ├── urls.py
     └── wsgi.py

这样,使用的时候,模板就是 "tutorial/index.html" 和 "tryit/index.html" 这样有app作为名称的一部分,就不会混淆。

 

模板中的一些循环,条件判断,标签,过滤器等使用请看Django 模板进阶。

转载于:https://www.cnblogs.com/jasonli-01/p/6675594.html


http://www.niftyadmin.cn/n/976008.html

相关文章

微信小程序(15)--上传图片公用组件(2)

接下来开始写写上传图片的公用组件&#xff0c;可以自定义上传几张图片。 chooseImage文件夹里面的index.wxml和index.js,涉及图片上传&#xff0c;删除&#xff0c;预览。 <view class"img-v clearfix"><view class"img-chooseImage" wx:for&quo…

SharePoint online Multilingual support - Settings

博客地址&#xff1a;http://blog.csdn.net/FoxDave This post will talk about how to enable sharepoint online site multilingual support. Below are the labels supported by SharePoint online when site language is changed. Site TitleSite DescriptionList TitleLis…

Linux运维文件系统

文章系统和目录结构文件系统的基本介绍文件名的规则以及文件颜色的分类 注&#xff1a;文件名有的可以不区分大小写文件系统的基本结构linux的文件类型centos7和6的目录变化转载于:https://blog.51cto.com/13873505/2149199

「转载」基环树学习笔记

本文转载于cly_none&#xff0c;并在此基础上修改 已征得本人同意并获取markdown源码 原地址 基环树&#xff0c;也是环套树&#xff0c;简单地讲就是树上在加一条边。它形如一个环&#xff0c;环上每个点都有一棵子树的形式。因此&#xff0c;对基环树的处理大部分就是对树处理…

JavaScript 开发的技巧

JavaScript 开发的45个经典技巧 分类 编程技术 JavaScript是一个绝冠全球的编程语言&#xff0c;可用于Web开发、移动应用开发&#xff08;PhoneGap、Appcelerator&#xff09;、服务器端开发&#xff08;Node.js和Wakanda&#xff09;等等。JavaScript还是很多新手踏入编程世界…

Angular系列学习三:父子组件之间的交互(常见的组件通讯场景)

作者&#xff1a;心叶时间&#xff1a;2018-07-24 16:48:56 通过输入型绑定把数据从父组件传到子组件 通过Input()可以实现父组件传递数据给子组件&#xff0c;下面先看看子组件代码&#xff1a; import { Component, Input } from angular/core;Component({selector: child-co…

map按照value排序的方法

1.将map以pair(string,double)的存储方式加入vector中 2.vector的sort()中的第三个参数重载 #typedef pair<string,double> PAIR struct CmpByValue { bool operator()(const PAIR& lhs, const PAIR& rhs) { return lhs.second < rhs.second; } }; map<QS…

python基础学习笔记(六)

学到这里已经很不耐烦了&#xff0c;前面的数据结构什么的看起来都挺好&#xff0c;但还是没法用它们做什么实际的事。 基本语句的更多用法 使用逗号输出 >>> print age:,25 age: 25 如果想要同时输出文本和变量值&#xff0c;却又不希望使用字符串格式化的话&#xf…