Вопрос

Я использую среду разработки запуска Windows для Google App Engine.

Я загрузил источник Django 1.1.2 и не переиграл подкаталог «django», чтобы жить в моем каталоге приложений (одноранговый Par of App.yaml)

В верхней части каждого исходного файла .py я делаю это:

import settings
import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'

В моем файле stens.py (который также живет в корне каталога приложений), я делаю это:

DEBUG = True
TEMPLATE_DIRS = ('html')
INSTALLED_APPS = ('filters')

import os
os.environ["DJANGO_SETTINGS_MODULE"] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.1')
from django.template import loader

Да, это выглядит немного как излишний, не так ли?

Я использую только django.template. Я явно не использую ни одной другой части Джанго.

Однако периодически я получаю одну из двух ошибок:

1) Джанго жалуется, что django_settings_module не определен.
2) Джанго жалуется, что общий.html (шаблон, который я протягиваю в других шаблонах) не существует.

В 95% случаев эти ошибки не встречаются, и они случайно начинают происходить. Оказавшись в этом состоянии, локальный сервер кажется «втиснутым» и перезагрузка его, как правило, исправляет его.

Что заставляет это произойти, и что я могу с этим поделать? Как я могу даже отладить это?

Вот Traceback от ошибки:

Traceback (most recent call last):
  File "C:\code\kwbudget\edit_budget.py", line 34, in get
    self.response.out.write(t.render(template.Context(values)))
  File "C:\code\kwbudget\django\template\__init__.py", line 165, in render
    return self.nodelist.render(context)
  File "C:\code\kwbudget\django\template\__init__.py", line 784, in render
    bits.append(self.render_node(node, context))
  File "C:\code\kwbudget\django\template\__init__.py", line 797, in render_node
    return node.render(context)
  File "C:\code\kwbudget\django\template\loader_tags.py", line 71, in render
    compiled_parent = self.get_parent(context)
  File "C:\code\kwbudget\django\template\loader_tags.py", line 66, in get_parent
    raise TemplateSyntaxError, "Template %r cannot be extended, because it doesn't exist" % parent
TemplateSyntaxError: Template u'common.html' cannot be extended, because it doesn't exist

И edit_budget.py начинается с именно тех строк, которые я включил вверх.

Все шаблоны живут в каталоге под названием «HTML» в моем корневом каталоге, и существует «html/common.html». Я знаю, что шаблонный двигатель находит их, потому что я начинаю с "html/edit_budget.html", который расширяет common.html.
Похоже, что модуль настроек каким -то образом не применяется (потому что это то, что добавляет HTML к пути поиска для шаблонов).

Это было полезно?

Решение

Во -первых, хотя Django в настоящее время намного более совместим с App Engine, чем один раз, между двумя платформами все еще существуют некоторые серьезные несовместимости, что означает, что вы не можете просто сбросить фондовую копию Django в свой каталог Appengine и получить его. коробка. Вещи будут ошибочными странными способами.

Существует ряд проектов, которые направлены на улучшение совместимости между двумя проектами, наиболее заметным является приложение-монета. Я настоятельно рекомендую прочитать следующую статью http://code.google.com/appengine/articles/app-engine-patch.html и остальные статьи, расположенные по адресу code.google.com/appengine/articles/ под вкладкой Django.

Что касается некоторых из ваших конкретных проблем, вы можете попробовать это в своем скрипте настройки:

#setup django environment
from django.core.management import setup_environ
import settings
setup_envion(settings)

Это то, что Django использует внутреннюю часть для настройки среды в Manage.py, и является принятой лучшей практикой для настройки Django для использования со сценариями (например, App Engine).

Другие советы

У меня точно такая же проблема, и я не смог обойти это ... хотя я заметил, что это происходит намного меньше с настоящим GAE, чем с сервером разработки, который я запускаю на своей рабочей станции Linux Анкет

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top