django变量使用-在模板中使用视图函数中的变量

DTL语言,即django template language

第一次使用时,需要修改项目的setting.py文件,将其中TEMPLATES中的DIRS修改为os.path.join(BASE_DIR, 'templates'),BASE_DIR在setting.py文件中定义为BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))),表示项目所在的文件夹

使用render时,系统会默认从setting.py文件的TEMPLATES中的DIRS所指的路径寻找渲染文件

如果DIRS为空,而APP_DIRS为True,系统则会从项目的各个app的templates目录下去寻找渲染文件,前提是app已经添加到setting.py文件的INSTALLED_APPS中。

templates的查找顺序:DIRS、APP_DIRS

#项目的setting.py中templates的最初配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

#INSTALLED_APPS的最初配置
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

 

 

template_intro_demo

渲染模板的两种方式

1.需要导入from django.template.loader import render_to_string,最后HttpResponse返回一个render_to_string的值

例如html=render_to_string('index.html')  return HttpResponse(html)

2.直接通过render返回,render返回的第一个参数为request,第二个为要渲染的文件名称,一般使用这种方式

return render(request,'index.html')

 

 

在模板中使用变量,有两种方法,但在html模板中必须将变量放在{{ 变量 }}中

①将变量存放在字典中,在render中通过context=字典的形式接收变量,然后在模板中直接通过字典的键值引用

#视图函数
from django.shortcuts import  render
def index(request):
    con={'username':'ahahhah','age':25,'hobby':'basketball'}   #定义变量,变量只能为字典形式
    return render(request,'index.html',context=con) #render只能通过context接收变量

#渲染文件
……
<body>
   {{ username }} #直接使用字典的键获取键值,不需要使用context.键否则无法获取到值
   {{ age }}
   {{ hobby }}
</body>
……

 

②变量以任何形式存在,在render中通过{'接收变量的名称':'变量名称'}的形式接收变量,然后在模板中通过接收变量的名称(如果为列表、元组、字典、对象等,需通过下标访问)引用

#视图函数
from django.shortcuts import  render
def index(request):
    con=['ahahhah',25,'basketball']   #定义变量,可以是数字、字符串、列表、元组、字典、对象等
    return render(request,'index.html',{'person':con}) #render通过字典形式接收变量

#渲染文件
……
<body>
   {{ person.0 }} #以render中的字典的键来表示变量,并通过索引下标访问值
   {{ person.1 }}
   {{ person.2 }}
</body>
……

 

1.在模板中使用视图函数中的变量,需要将变量放置到{{变量名}}中

2.如果在render中通过字典的形式接收变量并且变量为列表、元组、字典、对象等,那么想要访问变量的值,需要通过变量.属性来访问,不能通过python下标的方式访问,如访问列表的第3个元素l.2

3.获取字典所有的key可使用d.keys,但是如果字典中有一个key的名称也为keys,那么d.keys就会获取到keys对应的键值,因此不建议在字典中定义key为字典的属性,例如keys、items、values

 

posted @ 2018-12-16 14:22  Forever77  阅读(1141)  评论(0编辑  收藏  举报