2014-11-04 92 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