13

我目前正在编写一些自定义模板标签,但由于某种原因它们不会加载。我的目录结构如下:

MyProj
 |
 ----MyApp
     |
     |----templatetags
          |
          |----myapp_tags.py
          |----__init__.py

在 myapp_tags.py

from django.template import Library, Node
from myproj.myapp.models import Product

register = Library()

class LatestProductsNode(Node):
    def render(self, context):
        context['recent_products'] = Product.objects.all()[:5]
        return ''

def get_latest_products(parser, token):
    return LatestProductsNode()

get_latest_products = register.tag(get_latest_products)

在 settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'myproj.myapp',
)

在模板中

{% load myapp_tags %}

尝试加载页面时出现的错误:

Exception Type:     TemplateSyntaxError Exception Value:    

'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags
4

5 回答 5

21

settings.py 中,您永远不应该明确地将项目命名为“myproj”。在INSTALLED_APPS中,只需使用“myapp”。另外,你应该有这个:

TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.load_template_source',
)

并确保__init__.pymyapp文件夹和templatetags.

使用manage.py shellthen查看myapp_tags.py文件from myapp.templatetags import myapp_tags中是否存在任何 python 错误。

另外,请确保myapp_tags.py文件名不与项目中的另一个文件夹/文件冲突。

希望这可以帮助。

于 2009-09-29T16:07:18.667 回答
16

让我感到困惑的一件事是模板标签的神奇导入绕过了开发服务器的自动重新加载。如果以下适用于manage.py shell

>>> from django.templatetags import myapp_tags
>>>

然后一切正常,您只需要重新加载开发服务器。另一方面,如果您遇到ImportError问题,您应该检查您的INSTALLED_APPS, 您在 templatetags 目录中有一个__init__.py文件以及其他答案中建议的所有其他内容。

这可能只适用于遇到模板标签加载问题的一小部分人,但这是我在几周内第二次遇到这个问题,而且两次都只是重新启动开发服务器才能让事情正常工作.

于 2009-10-06T20:51:39.210 回答
2

一些原因:

  1. 由于 templatetgs 代码中的错误。
  2. 如果您在模板标签中使用了模型导入

例如#2。如果你正在做:

from your_app2.models import model

这会出错,所以你应该在上面做

from your_project.your_app2.models import model

它以这种方式对我有用。

于 2011-06-14T02:41:29.953 回答
0

我刚刚在 Django 2 中遇到了同样的问题,并意识到自定义模板标记文件必须在所有项目应用程序中具有唯一的名称。

于 2019-08-21T13:17:40.043 回答
-3

问题是它nyapp_tags不在已安装项目的顶层。如果你myproj.myapp.templatetags输入INSTALLED_APPS,你应该没问题。

于 2009-09-27T17:26:17.073 回答