如何定义自定义过滤器以最大限度地使用django模板?

时间:2015-02-23 20:55:02

标签: python django templates

我有一个python项目,我使用Django模板生成C ++源代码。

我选择了Django,因为模板语言非常严格,并且有一个非常大的社区,使最终用户可以轻松使用并获得帮助。

我没有为我的项目添加自定义过滤器(将一组类型名称转换为另一组)因为我没有完成正常的django设置。

相反:

from django.template import Context, Template
import django

if not django.conf.settings.configured : django.conf.settings.configure()
django.setup()

让我完美地使用Django模板但不定义自定义过滤器。

我的自定义过滤器名为ctypes_filters.py,我在模板中将其引用为

{% load ctypes_filters %}

运行我的生成脚本会导致以下错误:

django.template.base.TemplateSyntaxError: 'ctypes_filters' is not a valid tag library: Template library ctypes_filters not found, tried 

django.templatetags.ctypes_filters

如何在不设置完整Django项目(数据库定义等)的情况下让django找到过滤器?

我知道其他模板解决方案可用(并且可能更轻量级),但我真的很想使用Django的简单而优雅的模板。

1 个答案:

答案 0 :(得分:1)

Django模板标签的位置是按惯例而不是配置设置完成的(请参阅模板标签文档的code layout部分)。

ctypes_filter.py放在已安装的应用中的templatetags目录中(我在这里称之为myapp)。向__init__.pymyapp目录添加空templatetags。该应用不需要您在Django应用中常见的任何其他文件,例如models.pyviews.py

myapp/
    __init__.py
    templatetags/
        __init__.py
        ctypes_filter.py

然后在配置设置时在myapp中添加INSTALLED_APPS

django.conf.settings.configure(
    INSTALLED_APPS=('myapp',),
)