我的项目目录如下所示。 settings_value.py
有一个模板标记,其中包含“settings_value”。在我的settings.py中,我将'itslogical.templatetags'添加到INSTALLED_APPS
。我尝试在logicalhp/home.html
中使用它,但它说标签不存在。我正在使用this answer中的代码(我将名称从'value_from_settings'更改为'settings_value')。
.
├── 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))
答案 0 :(得分:1)
您不应将templatetags目录添加到已安装的应用程序中。您应该将templatetags目录放在现有应用程序中,并将其添加到已安装的应用程序中。
答案 1 :(得分:1)
尝试将templatetags文件夹移动到logicalhp
答案 2 :(得分:0)
问题的一部分是我的settings.py中的拼写错误(在'itslogical'中写了'logicalhp.templatetags')。更大的问题是它试图从我的设置中获取属性"STATIC_URL"
。它包括引号,所以它实际上是settings.__getattr__('"STATIC_URL"')
。
为了解决这个问题,我添加了一个条带。
return settings.__getattr__(str(self.arg)) #before
return settings.__getattr__(str(self.arg).strip('"')) #after
(顺便说一句,它不像你可以省略模板中的引号;否则它认为它是一个变量。)