问题加载自定义模板标签(错误:没有模块名为x)(Problem loading custom tem

2019-08-16 22:25发布

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

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

Answer 1:

settings.py中,你永远不应该将项目命名为“的Myproj”明确地。 在INSTALLED_APPS ,只要使用'MYAPP'。 此外,你应该有这样的:

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

而且一定要有一个__init__.pymyapp文件夹,以及在templatetags

使用manage.py shell ,然后from myapp.templatetags import myapp_tags如果theres在myapp_tags.py文件中的任何错误蟒找出。

此外,要确保myapp_tags.py文件名犯规冲突与项目中的另一个文件夹/文件。

希望这可以帮助。



Answer 2:

多数民众赞成绊倒了我一件事是, templatetags魔法进口绕过开发服务器自动重新加载。 如果在下面的工作manage.py shell

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

然后一切实际工作,你只需要重新加载开发服务器。 如果在另一方面,你得到ImportError那么什么是错的,你应该检查你的INSTALLED_APPS ,你必须在templatetags目录中的__init__.py文件和所有其他的答案提出的其他事情。

这可能只适用于谁的经验模板标签装载问题的人的一小部分,但是这是我在这个问题在几个星期内,并两次来到第二次,它只是采取重新启动开发服务器把事情的工作。



Answer 3:

一些原因:

  1. 由于templatetgs代码错误。
  2. 如果您在使用templatetags模型导入

对于#2中,例如。 如果你正在做的:

from your_app2.models import model

这会出问题,所以不是上面,你应该做的

from your_project.your_app2.models import model

它的工作我这样。



Answer 4:

问题是, nyapp_tags是不是在安装项目的顶层。 如果你把myproj.myapp.templatetagsINSTALLED_APPS ,你应该罚款。



文章来源: Problem loading custom template tags (Error: No module named x)