Django 搭建博客项目(二)——模板

如果用react 实现前端页面,Django就没必要使用模板,Django是个后台服务程序,接受请求,响应数据,接口设计就可以是纯粹的Reatful风格。
Python的模板引擎默认使用Django template language (DTL)构建
现在setting.py 里设置模板项目的路径,在TEMPLATES 里设置DIR:[os.path.join(BASE_DIR, templates] ,这个是以后默认找templates的路径。然后在项目根目录下自己新建一个文件夹改名templates

APP_DIRS表示是否在每个已经安装的应用中查找模板。应用(比如第一篇中的user目录)的目录下设置templates目录,存放templates。如果应用需要可分离、可重用,建议模板放在应用目录下。

在urls.pyfrom django.template import loader 就可以使用模板了。
如上篇文章的index函数:

def index(request):
		template = loader.get_template('index.html')
		context = {'name': 'shenkuo'}#可以把想要填入的东西组成这样的字典传入,html文件里要这样写:{{name}} 
		html = template.render(context) #这里的渲染仅仅是把html文件给拼接出来变成str,真正的渲染发生在前端浏览器。
		return HttpResponse(html.encode())

以上代码可以改写成更加简洁的形式

def index(request):
	context = {'name':'shenkuo'}
	return render(request,'index.html',context, status = 201)

使用render要导入, from django.shotcuts import render

在使用这种模板技术时候,不能用别的方式取用属性,只能用.的方式。比如有个字典,{{dict[‘a’]}} 这种是错误的,本质上Django是用正则表达式来匹配要替换的内容,因此只能用这种: {{dict.a}} ,包括list的索引 也要用这种 :list.1 , list.2
点号使用时候,按以下顺序查找:
1、字典 : foo[’‘bar’’] 2、属性、方法: foo.bar 3、 数字索引查找 foo[bar]
由于他自动会判断是否是属性或者方法,因此在调用时候不要加() ,而是直接用点的形式:
dict.getitem() # 错误
dict.getitem #正确
总之三种括号都不能用,用点就是了。

{%if condition1%}
	...display1
{%elif condition2%}
	...display2
{%endif%}

{%for x in list%}
	<li>{{x.name}}</li>
{%empty%}
	<p>如果迭代列表是空的或不存在执行这条</p>
{%endfor%}
{% ifequal a b%}
	<h1>welcome</h1>
{%endifequal%}

过滤器语法:{{变量 | 过滤器:’‘参数’’}}
{{name| first | join:’’.’’}}
在这里插入图片描述

也可以自定义filter
在一个应用下 ,比如user, 构建templatetags包,一定要有__init__.py 文件。

from django.template import Library
register = Library()
@register.filter('filter名字')
def multiply(a,b):#只能1到2个参数
	return a*b

在模板中使用的时候要先{%load 包名%}

猜你喜欢

转载自blog.csdn.net/qq_32835305/article/details/85052883
今日推荐