Адресация Yaml и шаблон с GAE не работают? TemplateDoesNotExist просто путем простого изменения в yaml?

#python #google-app-engine #templates #django-templates #yaml

#python #google-app-engine #шаблоны #django-templates #yaml

Вопрос:

У меня проблема с использованием шаблона в Google App Engine на Python. дело в том, что когда я обращаюсь к своей статической папке в Yaml, я не могу получить доступ к своему шаблону, и когда я удаляю его, к нему возможен доступ. посмотрите на файлы.

 this is my file structure
-src
----calc.py
----main.py
----index.html
----templ
---------calc.html
---------js
---------css

YAML:
handlers:
- url: /.*   script: main.py

MAIN.PY
def main():
    application = webapp.WSGIApplication([
      ('/', MainPage),
      ('/calc',Calc)
      ], debug=True)
    wsgiref.handlers.CGIHandler().run(application)

Calc.py
class Calc(webapp.RequestHandler):
    def get(self):
            temp = os.path.join(os.path.dirname(__file__), 'templ/calc.html')
            outstr = template.render(temp, temp_val)
            self.response.out.write(outstr)
  

РЕЗУЛЬТАТОМ ЯВЛЯЕТСЯ :
Статус: 200 OK
Тип содержимого: текст / html; кодировка = utf-8
Я могу получить доступ к своему файлу, и адресация шаблона работает

BUTTTTTT

когда я добавляю следующую строку в свой YAML для доступа к моим css и js и так далее. К нему невозможно получить доступ

 YAML:

    handlers:
    - url: /.*
      script: main.py

    - url: /templ
      static_dir: templ

or If i change order of them :
YAML:

    handlers:
    - url: /templ
      static_dir: templ

    - url: /.*
      script: main.py
  

ОБА не работают, и в этом моя ошибка

Статус: внутренняя ошибка сервера 500

Обратная трассировка (последний последний вызов):
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/_webapp25.py", строка 701, в __call__ 
 handler.get(*groups)
 Файл "/Users/em/Documents/workspace/NerkhARZ/src/calc.py ", строка 26, в get 
 outstr = template.render(temp, temp_val)
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py" строка 88 в рендеринге
 t = load(template_path, debug)
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py", строка 185, в load 
 верните _load_user_django(путь, отладка)
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/template.py" строка 110 в _load_user_django 
 template = django.template.loader.get_template(имя_файла)
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/template/loader.py" строка 79 в get_template 
 источник, origin = find_template_source(имя_шаблона)
 Файл "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/django_0_96/django/template/loader.py" строка 72 в find_template_source 
 поднимите TemplateDoesNotExist, назовите
TemplateDoesNotExist: calc.html

Пожалуйста, помогите мне с этим, для этого должно быть простое решение. Я действительно не верю, что GAE настолько глуп….

Заранее благодарю

Ответ №1:

Файлы, обозначенные как статические в app.yaml , недоступны для кода приложения во время выполнения python. Они обслуживаются непосредственно только браузером пользователя в ответ на запросы, соответствующие регулярному выражению в app.yaml .

Не помечайте шаблоны как статические. Только файлы, которые должны предоставляться пользователю как есть, такие как javascript, CSS и изображения, должны быть помечены как статические.

Комментарии:

1. Хорошо, я понял вашу точку зрения, кстати, есть ли какая-либо возможность исключить этот конкретный файл из всего каталога или нет?

2. Нет. Храните шаблоны и прочее, которые будут обслуживаться статически в разных каталогах.

3. Я изменил свою структуру на это: ‘—/app/*.py —/templates / *.html’ как я могу определить это в Yaml? у вас есть какие-либо идеи?

4. Ваши шаблоны вообще не упоминаются в app.yaml; только скрипты и файлы, статически передаваемые непосредственно в браузер пользователя.

Ответ №2:

В дополнение к проблеме, выявленной Wooble, вы добавляете свой static_dir обработчик после своего .* обработчика скрипта. Обработчики обрабатываются по порядку, поэтому static_dir обработчик никогда не будет выполнен, поскольку все запросы перехватываются .* одним.