2014-11-04 135 views
1

我有一个django项目和一个应用程序。我想获得一个简单自定义模板标签工作。所以,我创建了一个Python文件:模板标签的错误

#my_site/settings.py 
INSTALLED_APPS = (
    #.....  
    'my_app' 
) 


#my_site/my_app/templatetags/my_app/say_hello_tag.py 
from django import template 

register = template.Library() 

@register.simple_tag 
def say_hello(model_instance): 
    return model_instance.say_hello() 

#my_site/my_app/templates/my_app/my_model_list.html 
{% load say_hello_tag %} 
.................................... 
<td>{% say_hello object %}</td> 

和错误是:

TemplateSyntaxError at /my_app_base_dir/ 
'say_hello_tag' is not a valid tag library: Template library say_hello_tag not found, tried django.templatetags.say_hello_tag, django.contrib.admin.templatetags.say_hello_tag, django.contrib.staticfiles.templatetags.say_hello_tag 

如何解决呢?

+0

您可能需要重新启动服务器才能加载标签 – dazedconfused 2014-11-04 03:25:55

+0

@dazedconfused,重新启动。 – 2014-11-04 03:26:11

+0

你的templatetags目录中有'__ init __。py'吗? – dazedconfused 2014-11-04 03:28:27

回答

1

请参阅Django的Custom template tags

的应用程序应该包含创建一个templatetags目录,在同级别的 models.py,views.py等。如果这不存在,创建它 - 不要忘记__init__.py文件以确保该目录被视为 作为Python包。添加此模块后,您需要重新启动服务器 ,然后才能使用 模板中的标签或过滤器。

例如,如果您的自定义标签/过滤器在一个名为 poll_extras.py文件,你的应用程序布局可能是这样的:

polls/ 
    __init__.py 
    models.py 
    templatetags/ 
     __init__.py 
     poll_extras.py 
    views.py 

你的目录结构应该是这样的:

my_site/ 
    my_app/ 
     __init__.py 
     templatetags/ 
      __init__.py 
      say_hello_tag.py 
     models.py 
     view.py 
     ... 

我想你必须按照Django文档中说明的结构布局才能得到这个权利。

+0

但我的文件夹结构不同。什么是“民意调查”在这里:网站或应用程序? – 2014-11-04 03:39:19

+0

我的模板标签位于“#my_site/my_app/templatetags/my_app/say_hello_tag.py”中。我应该在哪里放** __ init __。py **? – 2014-11-04 03:40:40

+0

这里的'polls'是一个应用程序 – dazedconfused 2014-11-04 03:41:17