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


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

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

    渲染模板

    • 先在templates文件夹下创建html文件。

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

        在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 对象一步到位完成。

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

    模板查找路径配置

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

    • DIRS:这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用 render或者render_ to _ string渲染模板的时候,会在这个列表的路径中查找模板。

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

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

    模板变量的使用

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

    • 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,即对应的值。这样是会产生歧义的。为了避免产生歧义,应该避免在这个字典内写他本身的一些属性来作为这个键的值!

    另外的形式

    • views.py示例

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

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

    • html代码示例

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

    同理,元组也是这样。

  • 相关阅读:
    java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)
    java:JSP(JSPWeb.xml的配置,动态和静态导入JSP文件,重定项和请求转发,使用JSP实现数据库的增删改查实例)
    java:LeakFilling(Servlet,JSP)
    java:Servlet(Create,LifeCycle,ServletWeb.xml文件的配置,交互式,Tomcat文件分析,单例安全模式)
    i春秋 小漏洞也有大梦想
    sqlmap 使用总结
    apk逆向实例 TopCtf
    python scrapy 报错 DEBUG: Ignoring response 403
    scrapy基本使用(二)
    scrapy基本使用(一)
  • 原文地址:https://www.cnblogs.com/jiajiaba/p/10548866.html
Copyright © 2020-2023  润新知