美文网首页python学习
Python学习打call第五十八天:Django 模板引擎以及

Python学习打call第五十八天:Django 模板引擎以及

作者: 暖A暖 | 来源:发表于2019-04-13 12:36 被阅读5次

    在Django框架中,可以使用两种模板引擎,一种是默认的Django模板引擎,还有一种是Jinja2模板引擎

    1.模版引擎的作用和优点

    模版引擎作用是将View视图中需要在前端HTML页面中展示的数据,通过模板引擎的语法规则,展示出来;

    模版引擎优点是将业务逻辑的Python代码和页面设计的HTML代码分离,使代码更干净整洁更容易维护,使Python程序员和HTML/CSS程序员分开协作,提高生产的效率,且将HTML代码分离出来,还能使其能够复用;

    2.HTML模板存放的位置

    HTML模板存放的位置有两个,一个是存放在settings文件中指定的DIRS的目录列表中,还有一个是直接在对应的APP包下,创建templates目录,将HTML放置于此即可,不同APP对其他APP目录下的templates目录都是可见的;

    3.模板引擎的配置

    先在项目的settings.py文件中找到TEMPLATES变量,然后加入

    TEMPLATES = [
        {
            # 选择模板引擎,默认是Django的模板引擎
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            #或者是jinja2模版  'BACKEND': 'django.template.backends.jinja2.Jinja2'
    
            # 指定HTML模板存放的目录,如果HTML模板较多,可以设置多个模板路径
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            # APP_DIRS的值判断是否支持将template目录放置在APP中,Django默认支持值为True
            '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',
                ],
            },
        },
    ]
    

    4.Django模板引擎的模板语法

    变量(VARIABLE):

    {{ VARIABLE }}   # 用于引入后台传入的变量
    {{ VARIABLE.name }}
    {{ VARIABLE.age }}
    

    标签(TAG):

    {% TAG %}   # 用于循环
    
    1: 正序 for 循环
    {% for item in items %}
        <p>{{ forloop.counter }}</p>
        <p>{{ item.name }}</p>
        <p>{{ item.desc }}</p>
    {% endfor %}
    
    2: 倒叙 for 循环
    {% for item in items reversed %}
        <p>{{ forloop.counter }}</p>       # 记录循环到第几次,计数从1开始
        <p>{{ item.name }}</p>
        <p>{{ item.desc }}</p>
    {% endfor %}
    
    3: 变量字典
    {% for k,v in dictionary.items %}
        <p>{{ k }},{{ v}}</p>
    {% endfor %}
    

    5.Django模板的继承的作用

    在Django开发过程中,页面中的重复部分,可以通过Django的模板继承来完成,这样使得页面开发和管理更简单;

    在HTML页面中使用到的关键字:

    {% extends 这里填写被继承的HTML页面 %}
    
    {% block 这里填写继承的block %}  {% endblock %}
    
    {% include 这里填写需要引入的HTML子页面 %}
    

    6.如何实现继承模板

    我们知道了模板可以用继承的方式来实现复用,那接下来我们一起来操作一下:

    第一步:可以在项目的templates中先编写好一个html页面,作为网站的基础页面被其他页面继承,我的HTML页面为base.html,然后在其中编辑HTML代码,注意要修改的部分写在{% block %} {% endblock %}的中间;

    <body>
        <div class="header">
            今天是星期几呀
        </div>
        
        <!-- 内容变化部分 -->
        {% block content %}
        <div class="content">
            <p>今天是星期一</p>
        </div>
        {% endblock %}
        
        <div class="footer">
            好的,谢谢
        </div>
    </body>
    

    第二步:在你想要的app的templates目录下创建一个html页面,继承之前的基础页面,我还是使用的courses app,创建一个python.html文件,这些名字都可以自己命名的,不过要注意路径之类的;

    {% extends 'base.html' %}
    {% block content %}
         <div class="content">
            <p>今天是星期{{ week_id }}</p>
        </div>
    {% endblock %}
    

    第三步:在根路由urls.py中,添加访问路径的路由文件,一定要分清项目的了路由和app的路由哟

    url(r'^courses/', include(('courses.urls', 'courses'), namespace='courses')),
    

    第四步:在app的路由文件urls.py中添加要访问的html路径;

    urlpatterns = [
        url(r'python/(?P<week_id>\d+)$', python, name='python')
    ]
    

    第五步:在app下的views.py中创建一个python函数;

    from django.shortcuts import render
    
    def python(request, week_id):
        return render(request, 'python.html', {'week_id': week_id})
    

    然后我们就可以运行项目,运行项目依旧是打断点,然后调试,我们看看结果是否是我们预期的结果呢,比如我的访问路径是

    http://127.0.0.1:8000/courses/python/1
    

    python后面接数字,不然会报错,因为我们在第四步中添加路由访问的html路径的时候正则表达式验证必须是数组,这个可以大家自己修改的,可以按照自己的想法来做练习哟;

    相关文章

      网友评论

        本文标题:Python学习打call第五十八天:Django 模板引擎以及

        本文链接:https://www.haomeiwen.com/subject/wyexwqtx.html