2013-01-01 71 views
0

我的項目目錄看起來像這樣。 settings_value.py有一個模板標籤,其中名爲'settings_value'。在我的settings.py中,我添加了'itslogical.templatetags'到INSTALLED_APPS。我嘗試在logicalhp/home.html中使用它,但它表示標記不存在。我使用的代碼來自this answer(我將名稱從'value_from_settings'更改爲'settings_value')。如何讓Django識別自定義模板標籤?

. 
├── internetparse 
│   └── ... 
├── itslogical 
│   ├── settings.py 
│   ├── templates 
│   │   └── itslogical 
│   │    └── base.html 
│   └─── templatetags 
│      ├── __init__.py 
│      └── settings_value.py 
├── logicalhp 
│   ├── templates 
│   │   └── logicalhp 
│   │    └── home.html 
│   └── views.py 
└── manage.py 

讓我知道你是否需要別的東西。我在這裏錯過了什麼?

編輯:添加代碼和更新錯誤。這是基於@ Dan的回答。

500 ERROR: 
'settings_value' is not a valid tag library: Template library settings_value not found 
Template library settings_value not found, tried django.templatetags.settings_value ... 
#!/usr/bin/env python 

from django import template 
from django.conf import settings 

# Include settings from here in templates 
register = template.Library() 

# settings value 
@register.tag 
def settings_value(parser, token): 
    try: 
     # split_contents() knows not to split quoted strings. 
     tag_name, var = token.split_contents() 
    except ValueError: 
     raise template.TemplateSyntaxError, "%r tag requires a single argument" % token.contents.split()[0] 
    return ValueFromSettings(var) 

class ValueFromSettings(template.Node): 
    def __init__(self, var): 
     self.arg = template.Variable(var) 

    def render(self, context): 
     return settings.__getattr__(str(self.arg)) 

回答

1

您應該templatetags目錄未添加到安裝的應用程序。您應該將templatetags目錄放入現有應用程序中,並將其添加到已安裝的應用程序中。

+0

我把它和更新的問題。錯誤很奇怪,所以也許我在代碼中做了一些錯誤... – FakeRainBrigand

1

嘗試移動templatetags文件夾logicalhp

+0

謝謝。這是第一個問題:-) – FakeRainBrigand

0

部分的問題是在我的settings.py一個錯字(寫的「logicalhp.templatetags」當它在「itslogical」)。更大的問題是它試圖從我的設置中獲取屬性"STATIC_URL"。它包括了引號,所以它實際上是settings.__getattr__('"STATIC_URL"')

要修復它,我添加了一個條。

return settings.__getattr__(str(self.arg)) #before 
return settings.__getattr__(str(self.arg).strip('"')) #after 

(順便說一下,它不喜歡你可以省略模板引號;否則它認爲的它的一個變量)

相關問題