2015-09-15 4 views
0

Мой шаблон Jinja2 должен автоматизировать структуру HTML с моей индексной страницы. При запуске и просмотре программы ничего не отображается в браузере. Это DID работает, когда я использовал одну переменную, но что-то не так, когда я гнездовал несколько. Вот код:Почему мой шаблон Jinja2 не работает?

class MainPage(Handler): 
    def get(self): 
     stage = [name, lessons] 
     name = 'Stage 1' 
     lessons = [ 
        ['Lesson 1 Important Concepts',[ 
         ['HTML', 'HTML is the ...'], 
         ['Tags and Elements', 'This is an e...'], 
         ['Why Computers Are Stupid', 'Computers ne...'], 
         ['Inline and Block Elements', 'Block elem...'] 
        ] 
       ] 
        ['Lesson 2: Creating a Structured Document with HTML',[ 
         ['Developer Tools','Everything design...'], 
         ['HTML is Structured Like a Family Tree','HTML..'], 
         ['Text Editors','HTML is writt....'], 
        ] 
       ] 
        ['Lesson 3: Adding Style to HTML Using CSS',[ 
         ['Avoiding Repetition','If programm...'], 
         ['CSS','CSS, or cascading style sh....'], 
        ] 
       ] 
        ] 
     self.render("index.html", name=name, lessons=lessons) 

Вот шаблон:

<h1> {{name}} Important Concepts</h1> 
{% for lessons in stage %} 
<div class=“lesson”> 
    <h2>{{ lessons[0] }}</h2> 
    <div class="concept”> 
     <div class="concept-title"> 
      {{ lessons[0][0] }} 
     </div> 
     <div class="concept-description"> 
      {{ lessons[0][1] }} 
     </div> 
    </div> 
</div> 
{% endfor %} 

Мой проект GitHub здесь: https://github.com/graceehayden/Stage4Udacity-Session-2

Ошибки я получаю:

Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__ 
    rv = self.handle_exception(request, response, e) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__ 
    rv = self.router.dispatch(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
    File "/Users/gracehayden/Desktop/Udacity/Stage4Project/main.py", line 22, in get 
    stage = [name, lessons] 
UnboundLocalError: local variable 'name' referenced before assignment 
+0

Dont вы получить синтаксическую ошибку? И я не вижу никакой переменной stage1, которую вы передаете jinja. – ozy

+0

У меня есть ошибка, но я этого не понимаю. Тем не менее, этап 1 - это хороший момент! Вы бы подумали, что это будет очевидно, но я такой медленный ученик, что, наверное, меня переполняют и не могут видеть эти детали! Следовательно, мое обращение. – ghayden

+0

также, вместо использования списка списков, вы должны подумать о том, чтобы использовать словарь или несколько из них, чтобы избавиться от этих смешных индексов '[i]' и '[i] [j]'. Это сделает ваш код более читаемым. – Oz123

ответ

0

Значения могут только после они определены. Таким образом, вместо того, чтобы:

stage = [name, lessons] # this fails because "name" and "lessons" aren't yet set 
name = 'Stage 1' 
lessons = [] # big value here 

REORDER эти строки поставить определения name и lessons (определение их значения) перед тем место, где эти значения используются для определения stage:

name = 'Stage 1' 
lessons = [] # big value here 
stage = [name, lessons] 
Смежные вопросы