如何创建自定义django过滤器标记

时间:2010-01-17 17:13:47

标签: python django

我无法让我的网站识别自定义模板标记。我有以下目录结构:

  • PROJECT_NAME
    • PROJECT_NAME
      • templatetags
        • _ __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的模块

任何帮助都将受到赞赏:

TIA

安德鲁

更新

该网站有效但我无法使模板标签生效。如果我从installed_apps中删除project_name,我会收到以下错误:

  

异常值:'getattribute'是   不是有效的标签库:不能   从中加载模板库   django.templatetags.getattribute,不   名为getattribute的模块

3 个答案:

答案 0 :(得分:2)

错误是因为你的文件夹结构错了,我认为你必须阅读文档,这tutorial (part1)解释了正确的结构:

你有一个与app不同的项目:

  • PROJECT_NAME
    • APP_NAME
      • templatetags
        • 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',
)

这就是全部

答案 1 :(得分:1)

您确定这与模板标签有关吗?

听起来像project_name目录不在你的python路径上。错误页面上的输出应该显示当前的python路径,因此您可以检查它是否符合预期。

阅读本文以了解如何解决此问题: http://djangotricks.blogspot.com/2008/09/note-on-python-paths.html

答案 2 :(得分:1)

你的项目结构是,不要把它放得太精细,一团糟。你需要做的很多事情中的一些:

  • 不要对包含目录(项目)和内部目录(应该是应用程序名称)使用相同的名称。
  • manage.pysettings.py应位于外层,而不是应用内。
  • 我不知道第二个views是什么 - 它实际上是views.py吗?在这种情况下,它永远不会被使用。
  • templatetagsviews内的空文件应为 __init__.py ,即两侧的两个下划线。
  • 可能是问题的真正原因:你需要在应用程序中使用models.py,即使它是空的,Django根本不需要加载它 - 如果没有它,templatetags将不起作用。