请稍候,加载中....

No.9 Django模版

之前的列表输出太粗糙了,现在可以通过模版定义输出格式

模版路径设置

打开myproject/settings.py文件

模版设置项

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',
            ],
        },
    },
]

BACKEND - 默认的模版引擎

DIRS - 模版加载位置,可以定义多个位置

APP_DIRS - 默认为True,表示可以在每个app中加载模版

创建模版目录

Step1: 在APP_DIRS=True前提下,在polls目录下创建templates/polls目录

Step2: 在polls/templates/polls下创建一个index.html文件,作为index视图的模版文件

编辑index.html

<ul>
    {% for question in question_list %}
        <li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>

index.html包含了一些{% %}, {{ }}特殊符号,这些符号组成了模版语法,最终这些语句会被转换成Python语句

{%   %}  - 最终转换为对应的Python语句,比如 if, for语句

{{       }}  - 输出语句,会将{{ var_obj }} 之间的 var_obj输出到页面

通过模版,可以实现更换版面只需要修改模版,而不用更改视图,实现数据逻辑与显示逻辑分离

修改视图函数

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
from django.template import loader  # 增加的


from .models import Question
from django.utils import timezone

def index(request):
    questions = Question.objects.all()
    # out_put = ""
    #     # for q in questions:
    #     #     out_put += "%s - %s <br>" % (q.question_text, q.pub_date)
    template = loader.get_template('polls/index.html') # 增加的
    context = {
        'question_list': questions,
    }
    return HttpResponse(template.render(context))

通过模版加载器loader创建了template模版对象

context是一个字典,提供给template.render,字典的key就是模版里面的变量, 字典的value就是变量值

现在可以刷新一下 http://127.0.0.1/polls/

render便捷方式

创建模版,然后进行模版输出是开发web经常性的操作,所以刚才的操作可以简化

def index(request):
    questions = Question.objects.all()
    context = {
            'question_list': questions,
        }
    return render(request, "polls/index.html", context)

 


Python学习手册-