Django 模板

Django 模板

模板是Django的MVT结构的第三部分,也是最重要的部分。Django中的模板基本上是用HTML、CSS和Javascript写在一个.html文件中。Django框架有效地处理和生成动态的HTML网页,让终端用户看到。Django的功能主要是后端,所以,为了提供一个前端,为我们的网站提供一个布局,我们使用模板。根据我们的需要,有两种方法可以将模板添加到我们的网站上。
我们可以使用一个单一的模板目录,它将分布在整个项目中。
对于我们项目的每个应用,我们可以创建一个不同的模板目录。

对于我们目前的项目,为了简单起见,我们将创建一个单一的模板目录,它将分布在整个项目中。应用程序级的模板一般用于大项目,或者在我们想为网页的每个组件提供不同的布局时使用。

配置

Django模板可以在app_name/settings.py中进行配置。

TEMPLATES = [
    {
        # Template backend to be used, For example Jinja
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # Directories for templates
        'DIRS': [],
        'APP_DIRS': True,
 
        # options to configure
        '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',
            ],
        },
    },
]

使用Django模板

使用一个示例项目说明如何在Django中使用模板。模板不仅可以显示静态数据,还可以显示通过上下文字典连接到应用程序的不同数据库的数据。考虑一个名为geeksforgeeks的项目,它有一个名为geeks的应用程序。

要渲染一个模板,需要一个视图和一个映射到该视图的URL。让我们先在geeks/views.py中创建一个视图。

# import Http Response from django
from django.shortcuts import render
  
# create a function
def geeks_view(request):
    # create a dictionary to pass
    # data to the template
    context ={
        "data":"Gfg is the best",
        "list":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    }
    # return response with template and context
    return render(request, "geeks.html", context)

现在我们需要映射一个URL来渲染这个视图。

from django.urls import path
 
# importing views from views..py
from .views import geeks_view
 
urlpatterns = [
    path('', geeks_view),
]

最后在templates/geeks.html中创建一个模板。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Homepage</title>
</head>
<body>
    <h1>Welcome to Geeksforgeeks.</h1>
     
 
 
<p> Data  is {{  data }}</p>
 
 
 
    <h4>List is </h4>
    <ul>
    {% for i in list %}
    <li>{{ i }}</li>
    {% endfor %}
</body>
</html>

让我们检查一下它是否在工作。

Django Templates

Django模板语言

这是由Django模板提供的最重要的设施之一。Django模板是一个使用Django模板语言标记的文本文档或Python字符串。模板引擎可以识别和解释一些结构。主要的是变量和标签。正如我们在上面的例子中使用了for循环,我们把它作为一个标签。同样,我们可以使用其他各种条件,如if、else、if-else、empty等等。Django模板语言的主要特点是变量、标签、过滤器和注释。

变量

变量从上下文中输出一个值,它是一个类似于口令的对象,将键映射到值。我们从视图中发送的上下文对象可以在模板中使用Django Template的变量进行访问。

语法

{{ variable_name }}

示例
变量是由{{和}}包围的,像这样。

My first name is {{ first_name }}. My last name is {{ last_name }}. 

在上下文为{‘first_name’: ‘Naveen’, ‘last_name’: ‘Arora’}的情况下,该模板渲染为。

My first name is Naveen. My last name is Arora.

要了解更多关于Django模板变量的信息,请访问 – 变量 – Django模板

标签

标签在渲染过程中提供任意的逻辑。例如,一个标签可以输出内容,作为一个控制结构,例如 “if “语句或 “for “循环,从数据库中抓取内容,甚至可以访问其他模板标签。

语法

{% tag_name %}

示例

标签被{%和%}所包围,像这样。

{% csrf_token %}

大多数标签都接受参数,例如::

{% cycle 'odd' 'even' %}

常用的标签

Comment cycle extends
if for loop for … empty loop
Boolean Operators firstof include
lorem now url

过滤器

Django模板引擎提供过滤器,用于转换变量和标签参数的值。我们已经讨论了主要的Django模板标签。标签不能修改变量的值,而过滤器可以用来增加变量的值或根据自己的需要修改它。

语法

{{ variable_name | filter_name }}

过滤器可以是 “链式 “的。一个过滤器的输出被应用于下一个。{{ text|escape|linebreaks }}是一个常见的习惯,用于转义文本内容,然后将换行符转换为 <p>标签。

示例

{{ value | length }}

如果值是[‘a’, ‘b’, ‘c’, ‘d’] , 输出将是4。

主要的模板过滤器

add addslashes capfirst
center cut date
default dictsort divisibleby
escape filesizefodivisible byrmat first
join last length
line numbers lower make_list
random slice slugify
time timesince title
unordered_list upper wordcount

注释

模板忽略了{%comment%}和{%endcomment%}之间的所有内容。在第一个标签中可以插入一个可选的注释。例如,这在注释代码时很有用,可以记录代码被禁用的原因。

语法

{% comment 'comment_name' %}
{% endcomment %}

示例 :

{% comment "Optional note" %}
    Commented out text with {{ create_date|date:"c" }}
{% endcomment %}

要了解更多关于在模板中使用评论的信息,请访问评论 – Django模板标签

模板继承

Django的模板引擎中最强大也是最复杂的部分是模板继承。模板继承允许你建立一个基本的 “骨架 “模板,它包含了你网站的所有通用元素,并定义了子模板可以覆盖的块。Extends标签用于Django中的模板继承。人们需要不断地重复相同的代码。使用extends,我们可以继承模板和变量。

语法

{% extends 'template_name.html' %} 

示例 :
假设目录结构如下。

dir1/
    template.html
    base2.html
    my/
        base3.html
base1.html

在template.html中,以下路径是有效的。

{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程