Мой первый проект Django - PullRequest
       1

Мой первый проект Django

2 голосов
/ 18 августа 2010

Я начал изучать «Полное руководство по Django» и теперь хотел бы начать работу над своим собственным проектом.Я настроил Django и все такое.Я создал проект под названием djangoproject1.По сути, мне бы хотелось, чтобы главная страница была страницей регистрации / входа.Мой urls.py для djangoproject1 выглядит следующим образом:

urlpatterns = patterns('',
    (r'^/',include('djangoproject1.authentication.urls')),
)

У меня есть пакет (приложение) pydev под djangoproject1 под названием аутентификация, который имеет urls.py, который выглядит следующим образом:

urlpatterns = patterns('',
    (r'^$',direct_to_template,{'template':'index.html'}),
)

Пара вопросов:

  1. Я получаю ошибку "страница не найдена", что означает, что я, вероятно, делаю свое отображение / неправильно включаю
  2. Если я ничего не укажу вTEMPLATE_DIRS в settings.py, насколько я понимаю, Django будет искать в каждом пакете каталог с именем templates.Это правильно?

Ответы [ 3 ]

2 голосов
/ 19 августа 2010

То, что сказал Асинокс, неверно. Вы МОЖЕТЕ иметь глобальный каталог шаблонов, даже несколько из них. Но это не обязательно.

Фактически загрузка шаблона выполняется следующим образом:

  1. Django берет имя первого класса из TEMPLATE_LOADERS переменная настроек
  2. Создает экземпляр загрузчика шаблона на основании его имени
  3. Он пытается загрузить шаблон, используя этот экземпляр
  4. Если это удастся - шаблон возвращается
  5. Если не удается загрузить шаблон - он принимает следующее имя и начинает заново с 2.
  6. Если ни одному из загрузчиков шаблонов, перечисленных в TEMPLATE_LOADERS, не удалось загрузить шаблон, TemplateDoesNotExist исключение повышено

По умолчанию TEMPLATE_LOADERS установлено на

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
)

Как сказал Мэтью TEMPLATE_DIRS используется исключительно загрузчиком filesystem.load_template_source. Поэтому, если вы исключите его из списка, это никак не повлияет на процесс загрузки шаблона.

Для того, чтобы ваш шаблон был найден, я предлагаю вам сделать следующее:

  • Создайте пространство имен index.html, то есть сделайте так:
.
`-- djangoproject1
    `-- authentication
        `-- templates
            `-- authentication
                `-- index.html
  • Загрузить шаблон пространства имен:

    urlpatterns = patterns('',
        (r'^$', direct_to_template, {'template': 'authentication/index.html'}),
    )

Если вы этого не сделаете, вы не можете быть уверены, что Django загрузит index.html из приложения аутентификации.

Рассмотрим поведение app_directories.load_template_source загрузчика шаблонов.

Представим, что вы только что определили два приложения app1 и app2 (другие приложения не определены) и попросили загрузить шаблон 'path / to / template.html'.

Загрузчик будет проверять следующие пути в произвольном порядке:

  • project_root / app1 / шаблоны / путь / к / template.html
  • project_root / app2 / шаблоны / путь / к / template.html
1 голос
/ 19 августа 2010

Django НЕ будет автоматически искать каталог шаблонов, но в файле settings.py есть загрузчик шаблонов (который поставляется по умолчанию), который называется django.template.loaders.app_directories.Loader. Я НЕ РЕКОМЕНДУЮ использовать это, потому что это не именует ваши шаблоны. Это означает, что шаблон index.html в appone / templates будет скрывать шаблон index.html в apptwo / templates (если apptwo ниже appone в INSTALLED_APPS.

0 голосов
/ 19 августа 2010

Да, Django будет искать в других местах, но вам НУЖЕН каталог шаблонов в вашем проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...