加载自定义模板标记时出错(错误:没有名为x的模块)

ism*_*ail 10 django django-templates django-custom-tags

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

MyProj
 |
 ----MyApp
     |
     |----templatetags
          |
          |----myapp_tags.py
          |----__init__.py
Run Code Online (Sandbox Code Playgroud)

在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)
Run Code Online (Sandbox Code Playgroud)

在settings.py中

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'myproj.myapp',
)
Run Code Online (Sandbox Code Playgroud)

在模板中

{% load myapp_tags %}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

juj*_*ule 15

settings.py中,你永远不应该明确地命名项目'myproj'.在INSTALLED_APPS,只需使用'myapp'.另外,你应该这样:

TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.load_template_source',
)
Run Code Online (Sandbox Code Playgroud)

并确保__init__.pymyapp文件夹中以及中templatetags.

manage.py shell然后使用from myapp.templatetags import myapp_tags以查明myapp_tags.py文件中是否存在任何python错误.

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

希望这可以帮助.

  • +1 - 你刚从我办公室出生的旅行中保存了我的电脑.赞赏. (6认同)
  • @Pureferret for Django 1.8 看看这个:https://docs.djangoproject.com/en/1.8/ref/templates/upgrading/ 您需要在设置中添加模板目录。我刚刚遇到了这个。 (2认同)

Dan*_*ead 14

让我感到震惊的一件事是,模板标签的神奇导入绕过了开发服务器的自动重新加载.如果以下工作manage.py shell

>>> from django.templatetags import myapp_tags
>>>
Run Code Online (Sandbox Code Playgroud)

然后一切都在工作,你只需要重新加载开发服务器.另一方面,如果你得到一个ImportError错误的东西,你应该检查你的INSTALLED_APPS,你在templatetags目录中有一个__init__.py文件,在其他答案中建议了所有其他的东西.

这可能只适用于遇到模板标签加载问题的人中的一小部分,但这是我第二次在这个问题中出现这么多周而且两次都只是重新启动开发服务器以使工作正常.

  • 谢谢,这是我的问题 - 拉我的头发! (3认同)