2010-08-18 4 views
2

Я начал разбираться в The Definitive Guide to Django и теперь хотел бы начать работу над собственным проектом. У меня есть Django и все. Я создал проект под названием djangoproject1. В основном, мне хотелось бы, чтобы на главной странице была страница регистрации/входа. Мой urls.py для djangoproject1 выглядит следующим образом:Мой первый проект django

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. Это верно?
+0

вы получаете 404, когда вы просто пытаетесь попасть в корень вашего локального сервера dev? –

+0

Я думал, что urlpattern, который я указал WAS для корня (http: // localhost: 8000 /). Это приводит к ошибке 404. – JPC

+1

попробуйте изменить свой include ('djangoproject1 ... pattern to r' 'вместо r' ^/' –

ответ

2

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

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

  1. Джанго занимает первое имя класса из 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'}), 
    ) 

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

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

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

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

  • project_root/app1/шаблоны/путь/к/template.html
  • project_root/app2/шаблоны/путь/к/шаблон. html
+0

Так что, действительно, если я использую только загрузчик app_directories, мне не нужен загрузчик файловой системы и вам не нужен шаблон_dirs. По именам, на которых размещаются мои шаблоны, как вы делали это, отлично работает. Спасибо – JPC

+0

это пространство имен работает только до тех пор, пока вы не получите шаблоны/main/index.html в нескольких приложениях ... –

+0

Мне нужно, чтобы мои имена были разными, пока я предполагаю – JPC

0

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

+0

Я позаботился о том, чтобы разместить каталог шаблонов в основном проекте, а также в рамках моего пакета проверки подлинности. Я думаю, проблема в том, как я включаю. – JPC

1

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

+1

, сказав, что у вас ДОЛЖЕН иметь каталог шаблонов под каждым приложением, чтобы организовать ваши шаблоны, но я бы рекомендовал всегда явно перечислять полные пути к вашим шаблонам, поэтому вы уверены, что знаете, какой из них вы получаете. –

+0

спасибо, это полезный намек! поэтому в моем urls.py в пакете проверки подлинности, что должен указать мой словарь шаблона? 'Djangoproject1.authentication.templates.index.html'? Это кажется неправильным, потому что шаблоны - это не пакет – JPC

+0

правильно, это не пакет, это всего лишь файл в файловой системе. «djangoproject1/authentication/templates/index.html» –

Смежные вопросы