如何定义自定义过滤器以尽量减少使用 django 模板?

How do I define custom filters for minimal use of 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 简单而优雅的模板。

Django 模板标签的位置是通过约定而不是配置设置完成的(请参阅模板标签文档的 code layout 部分)。

ctypes_filter.py 放在已安装应用程序的 templatetags 目录中(我在这里将其命名为 myapp)。将空 __init__.py 添加到 myapptemplatetags 目录。该应用程序不需要您可能在 Django 应用程序中常见的任何其他文件,例如 models.pyviews.py.

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

然后在配置设置时在 INSTALLED_APPS 中包含 myapp

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