python “load”在Django模板中做什么?

jogvjijk  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(153)

因为“load”对于搜索来说太通用了:
1.“load”的目的是什么?在这个特定的例子中,它有什么作用?- 在模板文件base_weblog.html中,
{% load weblog %}{% render_month_links %}
1.是否使用了一些命名约定以使“load”完成其工作?例如,文件夹和/或文件的名称和/或类名?
1.“加载”的文档在哪里,您能详细说明吗?
详细信息:
该示例来自http://www.djangoproject.com/的源代码-直接下载URL是通过http://shrinkster.com/17g8
部分文件夹结构(没有文件扩展名的项目是文件夹):

django_website

  apps
    accounts
    aggregator
    blog
      urls.py
      models.py
        class Entry(models.Model)

      templatetags
        weblog.py
    contact
    docs

  templates
    base_weblog.html

    aggregator
    blog
      entry_archive.html
      entry_archive_year.html
      month_links_snippet.html
      entry_archive_month.html
      entry_detail.html
      entry_snippet.html
      entry_archive_day.html
    comments
    contact
    docs
    feeds
    flatfiles
    flatpages
    registration
xzabzqsa

xzabzqsa1#

load
加载自定义模板标记集。
有关详细信息,请参见自定义标记和过滤器库。

k2arahey

k2arahey2#

“load”后面的“weblog”(在模板文件django_website/templates/base_weblog.html中)引用文件夹django_website/apps/blog/templatetags中的文件weblog.py。文件夹templatetags的名称必须完全相同,并且必须包含名为__init__.py的文件(问题2)。
“load”使自定义模板标记(本例中为render_latest_blog_entriesrender_month_links)可用于模板,本例中为django_website\templates\base_weblog.html。“加载”是一个安全和性能功能。

k97glaaz

k97glaaz3#

  • load标签可以通过设置load标签中的文件来加载自定义模板标签。

例如,在core文件夹中创建templatetags文件夹,其中settings.py(空文件)和custom_tags.py如下所示,然后不要忘记重新启动服务器以将custom_tags.py应用于Django项目。* 其他名称可以用于custom_tags.py,根据我的实验,custom_tags.py可以在没有__init__.py(空文件)的情况下工作,但基本上,最好按照文档所说的在templatetags文件夹下创建__init__.py(空文件):

Django Project
 |-core
 |  |-settings.py
 |  └-templatetags # Here
 |     |-__init__.py
 |     └-custom_tags.py
 |-templates
 |  └-index.html
 |-app1
 └-app2

并且,不要忘记在settings.py中将core设置为INSTALLED_APPS,以将custom_tags.py应用于Django项目,如下所示。* 将core设置为INSTALLED_APPS也可以使用python manage.py collectstaticcore文件夹中的静态文件收集到Django Project根文件夹中。我建议在开始构建Django项目之前将core设置为INSTALLED_APPS

# "core/settings.py"

INSTALLED_APPS = [
    # ...
    'core', # Here
    'app1',
    'app2',
]

然后,在custom_tags.py中创建uppercaselowercase标记,如下所示。* 你可以看到我解释@register.simple_tag的答案:

# "core/templatetags/custom_tags.py"

from django.template import Library

register = Library()

@register.simple_tag
def uppercase(arg):
    return arg.upper()

@register.simple_tag
def lowercase(arg):
    return arg.lower()

然后,您需要设置文件custom_tags,方法是在load标签中省略.py,以使用uppercaselowercase标签,如下所示:

# "templates/index.html"

{% load custom_tags %}

{% uppercase "Hello World" %} # HELLO WORLD
{% lowercase "Hello World" %} # hello world

而且,您还可以创建像app1app2这样的文件夹,其中__init__.py(空文件)和custom_tags.pytemplatetags文件夹中,如下所示。* 其他名称对于app1app2文件夹是可以的,根据我的实验,app1app2文件夹中的custom_tags.py没有__init__.py(空文件)就不能工作,所以__init__.py(空文件)必须在app1app2文件夹下创建:

Django Project
 |-core
 |  |-settings.py
 |  └-templatetags
 |     |-app1 # Here
 |     |  |-__init__.py
 |     |  └-custom_tags.py
 |     |-app2 # Here
 |     |  |-__init__.py
 |     |  └-custom_tags.py
 |     |-__init__.py
 |     └-custom_tags.py
 |-templates
 |  └-index.html
 |-app1
 └-app2

然后,您需要在load标签中设置文件夹app1app2之后的文件custom_tags,以使用app1/custom_tags.pyapp2/custom_tags.py中定义的标签,如下所示:

# "templates/index.html"
                   #  ↓ ↓ Here ↓ ↓     ↓ ↓ Here ↓ ↓
{% load custom_tags app1.custom_tags app2.custom_tags %}

# ...

并且,如果在多个文件中有相同的标签,如uppercase,如下所示:

# "core/templatetags/custom_tags.py"

@register.simple_tag
def uppercase(arg):
    return arg.upper()
# "core/templatetags/app1/custom_tags.py"

@register.simple_tag
def uppercase(arg):
    return arg.upper() + " app1"
# "core/templatetags/app2/custom_tags.py"

@register.simple_tag
def uppercase(arg):
    return arg.upper() + " app2"

然后,使用在load标记中设置的最后一个文件的uppercase标记

# "templates/index.html"
                                    #  ↓ ↓ Here ↓ ↓
{% load custom_tags app1.custom_tags app2.custom_tags %}

{% uppercase "Hello World" %} # HELLO WORLD app2

最后,您可以通过多个应用程序文件夹app1app2以及core文件夹创建多个templatetags文件夹,如下所示:

Django Project
 |-core
 |  |-settings.py
 |  └-templatetags # Here
 |     |-__init__.py
 |     └-custom_tags.py
 |-templates
 |  └-index.html
 |-app1
 |  └-templatetags # Here
 |     |-__init__.py
 |     └-custom_tags.py
 └-app2
    └-templatetags # Here
       |-__init__.py
       └-custom_tags.py

但是,我建议在core文件夹中只创建一个templatetags文件夹,因为有以下3个原因:
1.在core文件夹中只管理一个templatetags文件夹比通过多个应用程序文件夹管理多个templatetags文件夹更容易。
1.对于Django Admin,没有文件夹可以创建templatetags文件夹,所以core文件夹是Django Admin最合理的地方。
并且,第三个原因是因为通过多个templatetags文件夹,如果有多个相同名称的文件,如custom_tags.py,如下所示:

Django Project
 |-core
 |  |-settings.py
 |  └-templatetags
 |     |-__init__.py
 |     └-custom_tags.py # Here
 |-templates
 |  └-index.html
 |-app1
 |  └-templatetags
 |     |-__init__.py
 |     └-custom_tags.py # Here
 └-app2
    └-templatetags # Here
       |-__init__.py
       └-custom_tags.py # Here

然后,Django模板中只加载了一个文件,但根据我的实验,我不知道要加载哪个文件,如下所示:

# "templates/index.html"
                             
{% load custom_tags %} # I don't know which `custom_tags.py` is loaded.

相关问题