2016-11-03 5 views
-1

Я работаю над приложением Django с открытым исходным кодом и создал для него некоторый дизайн. Теперь клиент хочет использовать его собственный, защищенный авторским правом дизайн. После прочтения документов Django я создал отдельный, закрытый репозиторий GIT, который я хочу использовать для нового дизайна. Я получил почти работу, добавив 2 элемента в настройки; дополнительную запись для поиска шаблонов в папке «funder_custom_templates» и дополнительную запись для поиска статических файлов в том же месте. Это, как я настроил ШАБЛОНЫ и STATICFILES_DIR:Как я могу создать папку шаблона вне моего проекта Django

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [ 
      os.path.join(PROJECT_DIR, '..', '..', 'funder_custom_templates'), 
      os.path.join(PROJECT_DIR, 'templates'), 
     ], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
       'fundraiser.context_processors.cart', 
      ], 
     }, 
    }, 
] 
STATICFILES_DIRS = [ 
    os.path.join(PROJECT_DIR, '..', '..', 'funder_custom_templates','static'), 
    os.path.join(PROJECT_DIR, 'static'), 
] 

Это работает для подмены базовой конструкции, расположенной в project_dir/шаблоны/base.html, когда я создаю funder_customer_templates/base.html и для всех статических файлов, как и ожидалось , Но я также хочу переопределить файлы шаблонов приложений, например blog/templates/blog/blog_index_page.html

Я попытался поместить эти файлы в корень funder_custom_templates, и я попытался имитировать структуру папок приложений в funder_custom_templates, но это не так, t загружайте специальные шаблоны приложения. Есть ли способ решить это?

Примера проект файлы со структурой папки, расположенной по адресу: https://github.com/acidjunk/funder/tree/develop/

+1

Может быть, вы не должны положить 'blog_index_page.html' в корень' funder_custom_templates', но в 'blog' подкаталоге ее, но я м не определен. –

+0

Пожалуйста, покажите макет шаблонов в 'funder_custom_templates'. – Alasdair

+0

Я протестировал материал макета, используя base.html из основного дизайна с добавленным текстом, чтобы я мог видеть, что был загружен правильный «пользовательский» шаблон. – acidjunk

ответ

1

Поскольку вы используете app_directories.Loader класс для загрузки шаблонов (заданных настроек 'APP_DIRS': True,), то для приложений specfic шаблонов Django будет перебирать вашу настройку INSTALLED_APPS ищет конкретный файл шаблона. Важно то, что он делает это по порядку.

Так что, если вы хотите переопределить blog/templates/blog/blog_index_page.html, тогда вам нужно будет иметь custom_blog/templates/blog/blog_index_page.html в приложении, которое приходит до blog.

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

документы знакомства Джанго для получения более подробной информации о шаблоне загрузки: https://docs.djangoproject.com/en/1.9/ref/templates/api/#django.template.loaders.app_directories.Loader

+0

Итак, в основном вы предлагаете дополнительное приложение под названием «aaa», которое будет использоваться для переопределения всех шаблонов и статических ресурсов из других приложений. Я попробую это, я надеялся, что у Django есть способ позволить ему загружать шаблоны и активы из-за пределов проекта. (например, почитайте APP_DIRS: True для папок без приложения, содержащих шаблоны. – acidjunk

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