2014-11-26 4 views
0

Django учебник предлагает организовать шаблоны, как это:Элегантный способ шаблонов пространства имен в Django

в каталоге шаблонов вы только что создали, создайте другой каталог под названием опросы, и в том, что создать файл с именем index.html , Другими словами, ваш шаблон должен быть в опросах/шаблонах/опросах/index.html. Из-за того, как работает загрузчик шаблонов app_directories, как описано выше, вы можете ссылаться на этот шаблон в Django просто как polls/index.html.

Учебник также говорит, что произойдет, если я просто положить index.html в опросах/шаблоны:

Теперь мы могли бы быть в состоянии уйти с проставлением наших шаблонов непосредственно в опросах/шаблонов (вместо создания другой подкаталог опросов), но на самом деле это будет плохая идея. Django выберет первый найденный шаблон, имя которого совпадает, и если у вас есть шаблон с тем же именем в другом приложении, Django не сможет отличить их. Мы должны уметь указать Django на правильную, и самый простой способ обеспечить это путем их размещения. То есть, помещая эти шаблоны в другой каталог, названный для самого приложения.

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

Есть ли другой путь к пространству имен, поэтому я могу ссылаться на шаблон как index.html без создания дублированных папок?

ответ

0

Способы создания шаблонов в проекте Django очень гибкие. Поэтому вам нечего мешать вам заказывать файлы шаблонов, но вы хотите, если вы укажете правильное имя шаблона в представлении. Например, вы могли бы использовать Based View Class для списка голосований, указав template_name, как угодно:

# polls/views.py 
from django.views.generic import ListView 
from .models import Poll 

class PollList(ListView): 
    model = Poll 
    template_name = 'any/path/you/choose/any_name.html' 

Сказав, что это хорошо, чтобы создать последовательную структуру шаблона, чтобы сохранить код обслуживаемой. Я бы рекомендовал, по крайней мере, сохранить ваши шаблоны на уровне страницы (вещи, которые используются для возврата всей страницы html), структурированные в папках с соответствующим именем приложения, и все, что вы включаете (фрагменты, включенные в тег {% include %}) в пределах includes вложенных папок , например, так:

templates 
    - base.html 
    polls 
     - poll_list.html 
     includes 
      - poll_votes.html 

Edit:

Если вам все еще нужно пространство имен, несмотря на это, вы могли бы использовать URL namespaces.

+0

Я вижу это. Тем не менее, меня все еще немного беспокоит тот факт, что мне нужно создать еще одну папку в опросах/шаблонах для Django, чтобы не путать опросы index.html с другим index.html приложения. Мое предположение заключалось в том, что пока я создаю изолированное приложение, его шаблоны также изолированы от других приложений без магии вложенных папок. –

+0

Причина, по которой это делается, заключается в том, что приложения ниже в настройках INSTALLED_APPS могут переопределять предыдущие шаблоны. Например, вы можете создать шаблон в admin/poll/poll_changelist.html, чтобы переопределить интерфейс администратора для вашей модели. Во всяком случае, я обновил свой ответ, чтобы включить возможность использования пространств имен url. – seddonym

+0

Хорошо, я обновил вопрос, спасибо, спасибо. –