如何创建自定义Django过滤器标签
我在让我的网站识别自定义模板标签时遇到了问题。我的文件夹结构是这样的:
- 项目名称
- 项目名称
- 模板标签
- __init__.py
- getattribute.py
- 视图
- __init__.py
- index.html
- 视图
- settings.py
- main.py
- manage.py
- urls.py
- 模板标签
- nbproject
- 项目名称
然后我把这个添加到了INSTALLED_APPS里:
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
'project_name'
)
接着我在模板中这样引用它:
{% load getattribute %}
{% for header in headers %}
<td>{{ obj|getattribute:header }}</td>
{% endfor %}
我遇到的错误是:
无法导入 controllers.EventController。错误是:没有名为 project_name 的模块
如果有人能帮忙,我会非常感激:
谢谢大家
安德鲁
更新:
网站可以正常工作,但我无法让模板标签正常工作。如果我把 project_name 从 installed_apps 中移除,就会出现以下错误:
异常值:'getattribute' 不是一个有效的标签库:无法从 django.templatetags.getattribute 加载模板库,没有名为 getattribute 的模块
3 个回答
1
你的项目结构,说实话,真是乱七八糟。你需要做的事情有很多:
- 不要把外层的文件夹(项目)和里面的文件夹(应该是应用的名字)起成一样的名字。
manage.py
和settings.py
应该放在最外层,而不是放在某个应用里面。- 我不太明白第二个
views
是什么——它真的是views.py
吗?如果是的话,那它根本不会被用到。 - 在
templatetags
和views
里面的空文件应该是__init__.py
,也就是两边都有两个下划线。 - 可能是你问题的真正原因:你需要在应用里面有一个models.py文件,即使它是空的,这样Django才能加载它——没有这个文件,templatetags是无法工作的。
1
你确定这个问题是跟模板标签有关吗?
听起来你的项目文件夹(project_name)没有在你的Python路径上。错误页面上会显示你当前的Python路径,你可以检查一下是不是和预期的一样。
想要了解如何解决这个问题,可以看看这个链接: http://djangotricks.blogspot.com/2008/09/note-on-python-paths.html
2
这个错误是因为你的文件夹结构不对。我觉得你应该看看文档,这个教程(第一部分)讲解了正确的结构:
你有一个项目,它和应用程序不是同一回事:
- 项目名称
- 应用名称
- 模板标签
- getattribute.py
- models.py
- views.py
- 模板标签
- 应用名称
- settings.py
- manage.py
还有在你的 INSTALLED_APPS
中:
INSTALLED_APPS = (
# 'django.contrib.auth',
'django.contrib.contenttypes',
# 'django.contrib.sessions',
'django.contrib.sites',
'project_name.app_name',
)
就这些了