Я создал простой проект python, который обслуживает несколько страниц. Я использую фреймворк «webapp» и django. То, что я пытаюсь сделать, это использовать один файл шаблона и загружать «файлы содержимого», содержащие фактический текст на странице.Чтение файлов в GAE с использованием python
Когда я пытаюсь читать файлы содержимого с помощью os.open, я получаю следующее сообщение об ошибке: PageContent = os.open (PAGEURL, 'г') следующим образом() OSError:. [Errno 1] Операция не допускается : 'content_includes/home.inc' error
Если я позволю системе шаблонов django прочитать один и тот же файл для меня, все будет хорошо!
Итак, вопрос в том, что я делаю неправильно, что django не ??? Используется тот же «pageUrl».
Код, приведенный ниже, даст мне ошибку, а если я прокомментирую первое задание на страницеСодержание, все будет хорошо.
Код:
pageName = "home"; pageUrl = os.path.join(os.path.normpath('content_includes'), pageName + '.inc') pageContent = os.open(pageUrl, 'r').read() pageContent=template.render(pageUrl, template_values, debug=True); template_values = { 'page': pageContent, 'test': "testing my app" }
Ошибка:
Traceback (most recent call last): File "/opt/apis/google_appengine/google/appengine/ext/webapp/__init__.py", line 511, in __call__ handler.get(*groups) File "/home/odessit/Development/Python/Alpha/main.py", line 19, in get pageContent = os.open(pageUrl, 'r').read() File "/opt/apis/google_appengine/google/appengine/tools/dev_appserver.py", line 805, in FakeOpen raise OSError(errno.EPERM, "Operation not permitted", filename) OSError: [Errno 1] Operation not permitted: 'content_includes/home.inc'
app.yaml:
handlers: - url: /javascript static_dir: javascript - url: /images static_dir: images - url: /portfolio static_dir: portfolio - url: /.* script: main.py
btw, template_values был объявлен до назначения pageName – Vladimir
Это ваш фактический код? Поскольку вы назначаете визуализированный шаблон своей переменной сразу после того, как вы пытаетесь его прочитать, и у вас линия с завершающей точкой с запятой. – geoffspear
две вещи: 1. это не мой фактический код, это его фрагмент (я вырезал кучу вещей и заменил их другими вещами), а для template_values он объявлен над именем страницы, так как я не нужны какие-либо замены, которые должны выполняться во время первого рендеринга, а второй рендер находится прямо под объявлением template_values. 2. Мне нравятся точки с запятой - я разработчик Java :) – Vladimir