#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
обработчик никогда не будет выполнен, поскольку все запросы перехватываются .*
одним.