2016-01-28 19 views
5

私は使用したいカスタムタグを作成しましたが、Djangoはそれを見つけることができません。私はgameprofile.htmlでコードをレンダリングするために、このタグを使用しようとしていますDjango - このタグの登録または読み込みを忘れましたか?

pygmentize.py

from pygments import highlight 
from pygments.lexers import get_lexer_by_name 
from django import template 
from pygments.formatters.other import NullFormatter 

register = template.Library() 

@register.tag(name='code') 
def do_code(parser,token): 
    code = token.split_contents()[-1] 
    nodelist = parser.parse(('endcode',)) 
    parser.delete_first_token() 
    return CodeNode(code,nodelist) 

class CodeNode(template.Node): 
    def __init__(self,lang,code): 
     self.lang = lang 
     self.nodelist = code 

    def render(self,context): 
     code = self.nodelist.render(context) 
     lexer = get_lexer_by_name('python') 
     return highlight(code,lexer,NullFormatter()) 

:私templatetagsディレクトリは、このように設定されています。私はgameprofile.htmlに移動すると

(% load pygmentize %} 
{% block content %} 
    <title>{% block title %} | {{ game.title }}{% endblock %}</title> 
    <div id="gamecodecontainer"> 
     {% code %} 
      {{game.code}} 
     {% endcode %} 
    </div> 
{% endblock content %} 

gameprofile.htmlは、私はエラーを取得する:カスタムタグが含まれてい

Invalid block tag on line 23: 'code', expected 'endblock'. Did you forget to register or load this tag?

+0

'{%のdo_codeの%} {%のENDCODEの%}'動作しますか? (それは名前を無視していますか) – Sayse

+0

私は試しましたし、 'do_code'も動作しません。 – 123

+0

ええ、私のところに実際に見えていないのは、あなたがブロックの中にブロックを持っているという事実だけです。それが物事に影響するかどうかはわかりません(タイトル)。(私は間違っている可能性がある、私は入れ子ブロックを使用するとは思わない) – Sayse

答えて

0

アプリはINSTALLED_APPSでなければなりません。あなたのディレクトリはINSTALLED_APPSになっていますか? documentationから

The app that contains the custom tags must be in INSTALLED_APPS in order for the {% load %} tag to work. This is a security feature: It allows you to host Python code for many template libraries on a single host machine without enabling access to all of them for every Django installation.

+0

'games'アプリはインストールされたアプリに含まれています。 – 123

+0

templatetagsであるカスタムタグを含むアプリ –

+0

'ImportError:templatetagsという名前のモジュールはありません.' – 123

9

あなたの代わりにpygmentizeの上部にあるこの

{% load games_tags %} 

を試してみたのですか?

+5

なぜですか? Pygmentizeはgame_tagsに置き換えられますか? game_tagsという名前のファイルがありません – f3n1Xx

+4

元の投稿に「game_tags」はありません。この回答は役に立ちません。 – HBat

5

エラーは次の行にあります:(% load pygmentize %}、無効なタグ。 {% load pygmentize %}

1

私は同じ問題を抱えていましたが、ここで解決しました。 this very excellent Django tutorialの最初のセクションに続いて、私は次のようでした:

  1. 実行することにより、新しいDjangoアプリケーションを作成します、python manage.py startapp new_app
  2. 編集settings.pyファイルをINSTALLED_APPSのリストに以下を追加:'new_app',
  3. 追加します新しいモジュールをnew_app_tagsという名前のnew_appパッケージに追加しました。 DjangoのHTMLテンプレートで
  4. 、ファイルの先頭に以下を追加しますが、{% extends 'base_template_name.html' %}後:{% load new_app_tags %}
  5. new_app_tagsモジュールファイルには、(下記参照)カスタムテンプレートタグを作成します。
  6. 上記の手順4のDjango HTMLテンプレートで、shiney新しいカスタムタグを使用してください。{% multiply_by_two | "5.0" %}
  7. お祝い!

実施例の工程5からの上記:

from django import template 

register = template.Library() 

@register.simple_tag 
def multiply_by_two(value): 
    return float(value) * 2.0 
関連する問題