Django 渲染模板、路径配置、变量使用。

#DTL与普通的HTML文件的区别:html

DTL模板是一种带有特殊语法的HTML文件,这个HTML文件能够被Django编译,能够传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,而后发送给客户端。DTL 是 Django Template Language 三个单词的缩写,也就是Django自带的模板语言。django

#渲染模板函数

  • 先在templates文件夹下建立html文件。url

  • render_to_string:找到模板,而后将模板编译后渲染成Python的字符串格式。最后在经过HttpResponse类包装成一个HttpResponse对象返回回去。spa

    在views.py文件中编写
    
      from django.template.loader import render_to_string
    
      from django.http import HttpResponse
    
      def index(request):
    
      	html = render_to_string("detail.html")
    
      	return HttpResponse(html)
    
      最后在urls.py文件中,将路径写入便可
  • 以上方式虽然已经很方便了。可是django还提供了一个更加简便的方式,直接将模板渲染成字符串和包装成 HttpResponse 对象一步到位完成。code

    在views.py文件中编写
    
      from django.shortcuts import render
    
      der index(request):
    
      	return render(request,'detail.html')

#模板查找路径配置htm

模板查找路径配置:在项目的 settings.py文件中。有一个TEMPLATES 配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径能够在这个地方配置。对象

  • DIRS:这是一个列表,在这个列表中能够存放全部的模板路径,之后在视图中使用 render或者render_ to _ string渲染模板的时候,会在这个列表的路径中查找模板。模板引擎

    'DIRS':[os.path.join(BASE_DIR, 'templates')]
  • APP_DIRS:默认为True,这个设置为 True 后,会在<font color=#FF0000>"INSTALLED _ APPS"</font>的安装了的 APP下的 templates文件加中查找模板。索引

    'APP_DIRS': True,
  • DIRS优先级高于APP_DIRS

#模板变量的使用

模板中能够包含变量, Django在渲染模板的时候,能够传递变量对应的值过去进行替换。变量的命名规范和Python很是相似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量须要经过视图函数渲染,视图函数在使用render或者render_to_string的时候能够传递一个<font color=#FF0000>context </font>的参数,这个参数是一个<font color=#FF0000>字典类型</font>。之后在模板中的变量就从这个字典中读取值的。

  • views.py代码示例

    def profile(request):
      	return render(request,'profile.html',context={'username':'张三 '})
  • profile.html模板代码示例

    <p>{{username}}</p>

模板中的变量一样也支持 点(.)的形式。在出现了点的状况,好比 person.username,模板是按照如下方式进行解析的:

  • views.py示例

    class Person(object):
      	def__init__(self,username):
      		self.username = username
    
      def profile(request):
      	p = Person('jiajia') #建立一个对象
      	context = {
      		'person':p
      	}
      	return render(request,'profile.html‘,context=context)
  • html代码示例

    <html>
      ...
      <body>
      	{{person.username}} #根据Key来获取
      </body>
      </html>

传递的一个参数是一个模型或者是一个类。获取属性的话。能够经过点的方式

若是person是一个字典呢?

  • views.py示例

    class Person(object):
      	def__init__(self,username):
      		self.username = username
    
      def profile(request):
      	context = {
      		'person':{
      			'username':'jiajia'   #person对应的是一个字典 
      		}
      	}
      	return render(request,'profile.html,context=context)
  • html代码示例

    {{person.username}}

#注意

若是views.py文件是这样的。

context = {
			'person':{
				'username':'jiajia'   #person对应的是一个字典 
				'keys':'abc'
			}
		}

html文件是这样的呢?

{{person.keys}}

返回的是abc,即对应的值。这样是会产生歧义的。<font color=#FF0000>为了不产生歧义,应该避免在这个字典内写他自己的一些属性来做为这个键的值!</font>

另外的形式

  • views.py示例

    context = {
      		'person':[ 
      			'a',   #这里是一个中括号
      			'b',
      			'c'
      		]
      	}

如何获取列表属性的第一个值a呢?

  • html代码示例

    {{person.0}}   #经过点(.)索引获取

同理,元组也是这样。

相关文章
相关标签/搜索