📜  Django 模板

📅  最后修改于: 2022-05-13 01:55:47.864000             🧑  作者: Mango

Django 模板

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

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

配置

可以在 app_name/settings.py 中配置 Django 模板,

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


Python3
# 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)


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


HTML



    
    
    
    Homepage


    

Welcome to Geeksforgeeks.

         

Data  is {{  data }}

          

List is

    
        {% for i in list %}     
  • {{ i }}
  •     {% endfor %}


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


使用 Django 模板

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

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

Python3

# 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 来呈现这个视图,

Python3

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

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

HTML




    
    
    
    Homepage


    

Welcome to Geeksforgeeks.

         

Data  is {{  data }}

          

List is

    
        {% for i in list %}     
  • {{ i }}
  •     {% endfor %}

让我们检查它是否有效,

django-模板

Django 模板语言

这是 Django 模板提供的最重要的工具之一。 Django 模板是使用 Django 模板语言标记的文本文档或Python字符串。模板引擎可以识别和解释一些结构。主要的是变量和标签。正如我们在上例中用于循环一样,我们将其用作标签。类似地,我们可以使用各种其他条件,例如 if、else、if-else、empty 等。Django Template 语言的主要特点是 Variables、Tags、Filters 和 Comments。

变量

变量从上下文中输出一个值,这是一个类似字典的对象,将键映射到值。我们从视图中发送的上下文对象可以在模板中使用 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' %}
 
 Commonly used Tags 
Commentcycleextends
iffor loopfor … empty loop
Boolean Operatorsfirstofinclude
loremnowurl

过滤器

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

句法

{{ variable_name | filter_name }}

过滤器可以“链接”。一个过滤器的输出应用于下一个过滤器。 {{ text|escape|linebreaks }} 是转义文本内容,然后将换行符转换为

标记的常用习惯用法。

例子

{{ value | length }}

如果值为['a', 'b', 'c', 'd'] ,则输出将为4

 Major Template Filters 
addaddslashescapfirst
centercutdate
defaultdictsortdivisibleby
escapefilesizefodivisible byrmatfirst
joinlastlength
line numberslowermake_list
randomsliceslugify
timetimesincetitle
unordered_listupperwordcount

评论

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

句法

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

例子 :

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

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

模板继承

Django 模板引擎中最强大也是最复杂的部分是模板继承。模板继承允许您构建一个基本“骨架”模板,该模板包含您网站的所有常见元素并定义子模板可以覆盖的块。 extends 标签用于 Django 中模板的继承。需要一次又一次地重复相同的代码。使用扩展我们可以继承模板和变量。

句法

{% extends 'template_name.html' %} 

例子 :
假设以下目录结构:

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

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

HTML

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

要了解有关模板继承和扩展的更多信息,请访问扩展 – Django 模板标签