我在我的应用程序中创建了一个templatetags
文件夹,在一个名为posts.py
的文件中,我编写了以下代码;
from django.template import Library, Node
from advancedviews.models import Post
register = Library()
class AllPost(Node):
def render(self,context):
context['all_posts'] = Post.objects.all()
return ''
def get_all_posts(parser,token):
return AllPost()
get_all_posts = register.tag(get_all_posts)
现在,我尝试在模板中加载此模板标记;
{% load get_all_posts %}
但是这给了我错误'get_all_posts' is not a valid tag library: Template library get_all_posts not found, tried django.templatetags.get_all_posts,django.contrib.admin.templatetags.get_all_posts
此模板中的错误是什么,或者我在这里遗漏了什么。
答案 0 :(得分:6)
使用load
,您需要使用库的名称,而不是标记 - 因此posts
就是这样。
(我假设你在templatetags目录中也有一个空白__init__.py
,并且该应用程序位于INSTALLED_APPS
)。
答案 1 :(得分:2)
假设您具有以下结构:
-- Application_Name
-------templatetags
--------------__init__.py
--------------templates_extras.py
-------__init__.py
-------settings.py
-- manage.py
您必须确保以下内容:
您的“templatetags”所在的应用程序本身实际安装在settings.py中的INSTALLED_APPS中(例如“Application_Name”)
“templatetags”中存在的标记模块本身已安装在settings.py的INSTALLED_APP中(例如“ApplicationName.templatetags.tempaltes_extras”)
确保您在templatetags目录下有“__init__.py
”
您必须重新启动服务器
在某些情况下,如果无效,则必须删除所有生成的* .pyc,然后重试