Джанго шаблон Путь - PullRequest
       3

Джанго шаблон Путь

79 голосов
/ 14 июня 2010

Я следую учебному пособию http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 в среде Windows 7. Мой файл настроек:

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/admin'
)

Я получил base_template из шаблона admin/base_site.html из каталога по умолчанию для шаблона администратора Django в исходном коде самого Django (django / contrib / admin / templates) в подкаталоге администратора каталога myapp, как указано в руководстве ,

По какой-то причине это никак не влияет. Любая подсказка в чем может быть проблема? Нужно ли делать синхронизацию БД?

Ответы [ 6 ]

164 голосов
/ 14 июня 2010

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

import os

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

...

MEDIA_ROOT = PROJECT_PATH + '/media/'

TEMPLATE_DIRS = (
    PROJECT_PATH + '/templates/',
)

Таким образом, вы можете перемещать свой проект Django, и ваши корни пути будут обновляться автоматически.Это полезно, когда вы настраиваете свой производственный сервер.

Во-вторых, в вашем пути TEMPLATE_DIRS есть что-то подозрительное.Он должен указывать на корневой каталог вашего шаблона.Кроме того, он также должен заканчиваться завершающим /.

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

TEMPLATE_DIRS = (
    'C:/django-project/myapp/mytemplates/'
)

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

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

Вам не нужно копировать шаблоны администратора, если только вы не хотите что-то перезаписывать.

Вам придется запустить syncdb, если у вас нетпока не запускаюВам также понадобится статически сервировать ваши медиа-файлы, если вы размещаете django через runserver.

29 голосов
/ 26 октября 2015

Если вы используете установленные параметры Django, то почему бы просто не использовать встроенные, предопределенные значения BASE_DIR и TEMPLATES? В пипе, установленном Django (v1.8), я получаю:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 


TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            ### ADD YOUR DIRECTORY HERE LIKE SO:
            BASE_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',
            ],
        },
    },
]
7 голосов
/ 15 марта 2018

Умное решение в Django 2.0.3 для хранения шаблонов в каталоге проекта (/root/templates/app_name):

settings.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
TEMP_DIR = os.path.join(BASE_DIR, 'templates')
...
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [TEMP_DIR],
...

в views.py просто добавьте такой путь к шаблону:

app_name/html_name
7 голосов
/ 21 августа 2014

Для Django 1.6.6:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')

Также статические и носители для режима отладки и производства:

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
if DEBUG:
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
else:
    STATIC_ROOT = %REAL_PATH_TO_PRODUCTION_STATIC_FOLDER%
    MEDIA_ROOT = %REAL_PATH_TO_PRODUCTION_MEDIA_FOLDER%

В urls.py необходимо добавить:

from django.conf.urls import patterns, include, url
from django.contrib import admin
from django.conf.urls.static import static
from django.conf import settings

from news.views import Index

admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    ...
    )

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

В Django 1.8 вы можете установить пути к шаблонам, бэкэнд и другие параметры для шаблонов в одном словаре ( settings.py ):

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            path.join(BASE_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',
            ],
        },
    },
]

Официальные документы.

6 голосов
/ 14 ноября 2014

У меня также были проблемы с этой частью учебника (использовался учебник для версии 1.7).

Моя ошибка заключалась в том, что я редактировал только строку «Администрация Django» и не уделял достаточного внимания руководству.

Это строка из django / contrib / admin / templates / admin / base_site.html :

<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>

Но через некоторое время и разочарование стало ясночто существует оператор 'site_header or default: _', который следует удалить.Таким образом, после удаления оператора (как в примере из руководства все работает как ожидалось).

Пример руководства:

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
1 голос
/ 11 мая 2019

Хорошо. Допустим, у вас есть совершенно новый проект, если вы захотите перейти к файлу settings.py и найти TEMPLATES, как только вы его найдете, просто вставьте эту строку os.path.join(BASE_DIR, 'template') в 'DIRS' и наконец вы должны получить что-то вроде этого:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'template')
        ],
        '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',
            ],
        },
    },
]

Если вы хотите узнать, где находится ваш каталог BASE_DIR, введите эти 3 простые команды:

python3 manage.py shell

Как только вы окажетесь в раковине:

>>> from django.conf import settings
>>> settings.BASE_DIR

PS: Если вы назвали свою папку с шаблоном другим именем, вы также изменили бы ее здесь.

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