2013-08-21 3 views
0

장고를 배우는 중입니다. 현재 내 자신의 템플릿 태그를 만드는 데 어려움이 있습니다. 메뉴 항목이있는 문자열을 기반으로 메뉴를 만드는 무언가를 만들려고합니다.Django Node AttributeError

{{항목}} {% %를 forloop.last하지 않을 경우} {menu_items의 %에서 항목에 대한 %}

: 장고 템플릿 언어에서, 다음은 내가 무엇을 찾고 생산할 것 |

def construct_menu(parser, token): 
    try: 
    tag_name, menu_items = token.split_contents() 
    except ValueError: 
    msg = '%r tag requires a space separated quote of strings.' % token.split_contents()[0] 
    raise template.TemplateSyntaxError(msg) 
    return MenuNode(menu_items[1:-1]) 

class MenuNode(template.Node): 
    def __init__(self, menu_items): 
    self.menu_items = str(self.menu_items) 

    def render(self, context): 
    ... 

register.tag('menu', construct_menu) 

을 그리고 여기에 내가 오류가있다 : {% ENDIF %}

{% ENDFOR %} 여기

내가 지정된 templatetags 응용 프로그램에서 입력하려고 무엇

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/news/ 

Django Version: 1.5.1 
Python Version: 2.7.2 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'news', 
'showroom', 
'contact', 
'templatetags') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Template error: 
In template /Users/per/Documents/Tilde/templates/home.html, error at line 1 
    'MenuNode' object has no attribute 'menu_items' 
    1 : {% extends "base.html" %} 


    2 : 


    3 : {% block title %} 


    4 : Home page! :D 


    5 : {% endblock %} 


    6 : for post in posts 


    7 :  post 


    8 : endfor 


    9 : {% block content %} 


    10 : This is where the news goes. 


    11 : {% endblock %} 

Traceback: 
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    115.       response = callback(request, *callback_args, **callback_kwargs) 
File "/Users/per/Documents/Tilde/news/views.py" in home 
    6. return render(request, 'home.html') 
File "/Library/Python/2.7/site-packages/django/shortcuts/__init__.py" in render 
    53.  return HttpResponse(loader.render_to_string(*args, **kwargs), 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in render_to_string 
    177.   return t.render(context_instance) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    140.    return self._render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in _render 
    134.   return self.nodelist.render(context) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in render 
    830.     bit = self.render_node(node, context) 
File "/Library/Python/2.7/site-packages/django/template/debug.py" in render_node 
    74.    return node.render(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in render 
    102.   compiled_parent = self.get_parent(context) 
File "/Library/Python/2.7/site-packages/django/template/loader_tags.py" in get_parent 
    99.   return get_template(parent) 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in get_template 
    146.  template, origin = find_template(template_name) 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in find_template 
    135.    source, display_name = loader(name, dirs) 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in __call__ 
    43.   return self.load_template(template_name, template_dirs) 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in load_template 
    49.    template = get_template_from_string(source, origin, template_name) 
File "/Library/Python/2.7/site-packages/django/template/loader.py" in get_template_from_string 
    157.  return Template(source, origin, name) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in __init__ 
    125.   self.nodelist = compile_string(template_string, origin) 
File "/Library/Python/2.7/site-packages/django/template/base.py" in compile_string 
    153.  return parser.parse() 
File "/Library/Python/2.7/site-packages/django/template/base.py" in parse 
    274.      compiled_result = compile_func(self, token) 
File "/Users/per/Documents/Tilde/templatetags/templatetags/tagtest.py" in construct_menu 
    34.  return MenuNode(menu_items[1:-1]) 
File "/Users/per/Documents/Tilde/templatetags/templatetags/tagtest.py" in __init__ 
    38.   self.menu_items = str(self.menu_items) 

Exception Type: AttributeError at /news/ 
Exception Value: 'MenuNode' object has no attribute 'menu_items' 

저는 기본적으로 전체 내용을 http://www.djangobook.com/en/2.0/chapter09.html에서 복사하고 있습니다. 이 오류는 나에게 이해가되지 않는다. 나는 모든 유효한 속성을 관련 장소에 전달한다고 생각합니다. 어떤 충고?

미리 감사드립니다.

self.menu_items = str(self.menu_items) 

을하지만이 __init__ 방법의 첫 번째 라인 :

답변

0

역 추적 오류가 여기 발생을 보여줍니다. self.menu_items은 아직 지정하지 않았기 때문에 존재하지 않습니다. 나는 당신이 의미하는 기대 :

self.menu_items = str(menu_items) 

(당신은 아마도 어떤 단계에서 menu_items을 반복하는거야 때문에, 당신이 문자열로 변환 할 이유를 모르겠어요,하지만).