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