我有一个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的简单而优雅的模板。
答案 0 :(得分:1)
Django模板标签的位置是按惯例而不是配置设置完成的(请参阅模板标签文档的code layout部分)。
将ctypes_filter.py
放在已安装的应用中的templatetags
目录中(我在这里称之为myapp
)。向__init__.py
和myapp
目录添加空templatetags
。该应用不需要您在Django应用中常见的任何其他文件,例如models.py
或views.py
。
myapp/
__init__.py
templatetags/
__init__.py
ctypes_filter.py
然后在配置设置时在myapp
中添加INSTALLED_APPS
。
django.conf.settings.configure(
INSTALLED_APPS=('myapp',),
)