[python] 장고 템플릿 경로

Windows 7 환경 에서 http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 의 자습서를 따르고 있습니다. 내 설정 파일은 다음과 같습니다.

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

내가 가지고 base_template템플릿에서를 admin/base_site.html장고 자체의 소스 코드의 기본 장고 관리자 템플릿 디렉토리 내에서 (장고 /있는 contrib / 관리 / 템플릿) 지시 튜토리얼 등의 MyApp 디렉토리의 관리자 하위 디렉토리에.

어떤 이유로 영향을받지 않는 것 같습니다. 문제가 무엇인지에 대한 단서가 있습니까? 동기화 DB를해야합니까?



답변

나는 이것이 Django 튜토리얼에 없다는 것을 알고 있으며 그들에게 부끄러운 일이지만 경로 변수에 대한 상대 경로를 설정하는 것이 좋습니다. 다음과 같이 설정할 수 있습니다.

import os.path

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

...

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

TEMPLATE_DIRS = [
    os.path.join(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를 실행해야합니다. 또한 runserver를 통해 django를 호스팅하는 경우 미디어 파일을 정적으로 서버해야합니다.


답변

설치된대로 Django 설정을 사용하는 경우 기본 제공되고 사전 정의 된 BASE_DIR 및 TEMPLATES를 사용하지 않는 이유는 무엇입니까? pip 설치된 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',
            ],
        },
    },
]


답변

프로젝트 디렉토리 ( /root/templates/app_name)에 템플릿을 유지하기위한 Django 2.0.3의 스마트 솔루션 :

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


답변

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',
            ],
        },
    },
]

공식 문서.


답변

튜토리얼의이 부분에도 문제가있었습니다 (버전 1.7의 튜토리얼 사용).

내 실수는 ‘장고 관리’문자열 만 편집하고 매뉴얼에 충분히주의를 기울이지 않았다는 것입니다.

이것은 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 또는 default : _’문이 있다는 것이 분명해졌습니다. 따라서 명령문을 제거한 후 (매뉴얼의 예와 같이 모든 것이 예상대로 작동했습니다).

예제 매뉴얼 :

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>


답변

좋아 ? 새 프로젝트가 있다고 가정 해 봅시다. 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 디렉토리의 위치를 ​​알고 싶다면 다음 세 가지 간단한 명령을 입력하십시오.

python3 manage.py shell

셸에 들어가면 :

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

추신 : 템플릿 폴더의 이름을 다른 이름으로 지정했다면 여기서도 변경해야합니다.


답변

django 3.1에서 프로젝트 설정으로 이동하여 OS 가져 오기

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