模板标记的错误

时间:2014-11-04 03:17:21

标签: python django

我有一个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 

我该如何解决?

1 个答案:

答案 0 :(得分:0)

请参阅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文档中所述的结构布局才能做到这一点。