django 编写我的第一个自定义模板标签和过滤器

Posted

技术标签:

【中文标题】django 编写我的第一个自定义模板标签和过滤器【英文标题】:django writing my first custom template tag and filter 【发布时间】:2014-12-02 12:50:18 【问题描述】:

我正在尝试编写一个简单的 django Custom template tags and filters 来用模板上的行空间替换 html 中断 ()。

我已关注 django 文档,但出现以下错误,我不知道如何解决。

我的错误是:

x_templates_extra' is not a valid tag library: Template library x_templates_extra not found, tried django.templatetags.x_templates_extra,django.contrib.staticfiles.templatetags.x_templates_extra,django.contrib.admin.templatetags.x_templates_extra,django.contrib.flatpages.templatetags.x_templates_extra,rosetta.templatetags.x_templates_extra,templatetag_handlebars.templatetags.x_templates_extra,globalx.common.templatetags.x_templates_extra,rollyourown.seo.templatetags.x_templates_extra,debug_toolbar.templatetags.x_templates_extra

这是我所做的:

1. created a templatetags directory, at the same level as models.py, views.py, etc

2. created a __init__.py file inside the templatetags directory to ensure the directory is treated as a Python package

3. created a file inside the templatetags directory called x_templates_extra.py

4. added the load tag to the template: % load x_templates_extra %

5. added the tag to the template:  x_detail.x_details_institution_name|safe|replace:"<br />"|striptags|truncatechars:popover_string_length_20 

6. Added the following code to the file x_templates_extra.py:

from django import template

register = template.Library()

def replace(value, arg):
   """Replaces all values of arg from the given string with a space."""
    return value.replace(arg, ' ')

问题:

文档声明:因此,在模块顶部附近放置以下内容:

from django import template

register = template.Library()

我已将导入和注册行放在名为 x_templates_extra.py 的文件中。对吗?

我也不确定在 INSTALLED_APPS 中放入什么来使负载正常工作。

尝试了很多东西,但我现在陷入困境,所以我确实需要帮助。

谢谢。

【问题讨论】:

你在 django 尝试过的模板标签列表中找到你的包/目录了吗? 没错,你必须将应用名称添加到INSTALED_APPS元组中! 【参考方案1】:

终于搞定了。

向 INSTALLED APPS 添加正确的应用名称是问题所在。

【讨论】:

【参考方案2】:

如果您的应用名称是 foo 并且您的标签文件夹名称是 goo 那么在 settings.py 您应该有:

INSTALLED_APPS = [
'foo',
'foo.goo'

]

你的app 和你的tag folder 都在你的应用程序包下 那里需要 Django 项目。

-> foo
    ---> models.py
    ---> views.py
    ---> goo
      -----> __init__.py
      -----> app_filters.py

【讨论】:

以上是关于django 编写我的第一个自定义模板标签和过滤器的主要内容,如果未能解决你的问题,请参考以下文章

我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误

django自定义模板标签和过滤器

Django 自定义过滤器和模板标签

Django—— 模板层:变量过滤器标签自定义标签和过滤器

Django 自定义模板标签和过滤器

Django之Django模板自定义过滤器