0

私のプロジェクトディレクトリは次のようになります。 settings_value.pyその中に「settings_value」という名前のテンプレートタグがあります。私のsettings.pyで、「itslogical.templatetags」をに追加しましたINSTALLED_APPS。で使用しようとしましたlogicalhp/home.htmlが、タグが存在しないと表示されます。この回答のコードを使用しています(名前を「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))
4

3 に答える 3

1

templatetags フォルダーを logicalhp に移動してみてください

于 2013-01-01T20:46:32.670 に答える
1

インストール済みアプリに templatetags ディレクトリを追加しないでください。既存のアプリ内に templatetags ディレクトリを配置し、それをインストール済みのアプリに追加する必要があります。

于 2013-01-01T20:36:10.073 に答える
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

(ちなみに、テンプレートで引用符を省略できるわけではありません。それ以外の場合は、変数であると見なされます。)

于 2013-01-01T21:01:01.303 に答える