如何创建自定义Django过滤器标签

1 投票
3 回答
1302 浏览
提问于 2025-04-15 18:07

我在让我的网站识别自定义模板标签时遇到了问题。我的文件夹结构是这样的:

  • 项目名称
    • 项目名称
      • 模板标签
        • __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.pysettings.py应该放在最外层,而不是放在某个应用里面。
  • 我不太明白第二个views是什么——它真的是views.py吗?如果是的话,那它根本不会被用到。
  • templatetagsviews里面的空文件应该是__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',
)

就这些了

撰写回答