2012-02-23 20 views
1

mytag.pyファイルにmytagのタグ定義があります。これは、settings.pyとINSTALLED_APPSでDjangoプロジェクトを使用しているときにうまく動作します。 - myappをリストに追加し、mytag.pyをmyapp/templatetagsに追加します。ファイルからカスタムDjangoタグを読み込むにはどうしたらいいですか?

私はdjango.conf.settings.configureを使用していますが、templatetagsサブディレクトリのモジュールはありません。mytag.pyをロードするにはどうしたらいいですか?


更新:

私は今templatetagsディレクトリにモジュールを使用しようとしましたが、私はそれを動作させることはできません。

ファイル:ここに私のセットアップです

  • myappの
    • __init.py__
    • templatetags
      • __init__.py
      • mytag.py
  • プログラム
    • test.py
    • test.htmlという

これは、関連するコードです:

# test.py 

from django.template import Template, Context 
from django.conf import settings 

from mostlystatic.processors.mostlystaticprocessor import MostlystaticProcessor 
from mostlystatic.stuff import DebugLogger 

import sys 
sys.path.append("~/") 

settings.configure(
    DEBUG=True, 
    TEMPLATE_DEBUG = True, 
    INSTALLED_APPS = ("myapp",) 
    ) 

t = Template(open("test.html").read()) 
c = Context({}) 
content = t.render(c) 

print content 

# test.html 

{% load mytag %} 

# mytag.py (doesn't load) 

from classytags.arguments import Argument 
from classytags.core import Tag, Options 
from django import template 

register = template.Library() 

class MyTag(Tag): 
    name="mytag" 

    def render_tag(self, context: 
     return "test" 

register.tag(MyTag) 

私はtest.pyを実行すると、私はこのメッセージが表示されます:

Traceback (most recent call last): 
    File "test.py", line 16, in <module> 
    t = Template(open("test.html").read()) 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 125, in __init__ 
    self.nodelist = compile_string(template_string, origin) 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 153, in compile_string 
    return parser.parse() 
    File "/Library/Python/2.7/site-packages/django/template/base.py", line 270, in parse 
    compiled_result = compile_func(self, token) 
    File "/Library/Python/2.7/site-packages/django/template/defaulttags.py", line 1033, in load 
    (taglib, e)) 
django.template.base.TemplateSyntaxError: 'mytag' is not a valid tag library: Template library mytag not found, tried django.templatetags.mytag 
+0

あなたのタグは、もう存在しないアプリから含めたいと思っていますか? – arie

+1

"ドキュメンテーションに従ったものを持っていましたが、今は<プロジェクトの設定方法を完全に破壊するもの>をしたいのですが、どうすればいいですか? –

+0

@arie私はまだタグファイルを持っています、私はそれをテストするためにアプリを使いました。 – fgm2r

答えて

3

最も簡単なことは、templatetagsサブディレクトリのモジュールを作成し、設定を構成するときにそのモジュールをINSTALLED_APPSに含めることです。

これ以外の方法であれば、Djangoの内部構造との取り組みが含まれます。

スクリプトがうまくいかない場合は、以下のような非常に単純なものにストリッピングしてからバックアップを作成してください。

from django.conf import settings 
settings.configure(INSTALLED_APPS=('my_app',)) 

from django.template import Template 
# my_tags does not exist, but the error shows that it is 
# searching my_app's template tag directory 
Template.render("{% load my_tags %}") 
TemplateSyntaxError: 'my_tags' is not a valid tag library: Template library my_tags not found, tried django.templatetags.my_tags, my_app.templatetags.my_tags 
+0

ありがとう、私はそれを試してみます。理想的ではありませんが、私はそれができると思います。 – fgm2r

+0

私はそれを試しましたが、それはまだ動作していません。理由は何ですか? – fgm2r

+0

私は問題を見ることができませんが、私は答えに加えた簡単な例を得ることができます。それから始めて、それを構築してください。 – Alasdair

関連する問題