Sé que esto no está en el tutorial de Django, y es una pena, pero es mejor configurar rutas relativas para las variables de ruta. Puedes configurarlo así:
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/'),
]
De esta manera, puede mover su proyecto Django y las raíces de su ruta se actualizarán automáticamente. Esto es útil cuando está configurando su servidor de producción.
En segundo lugar, hay algo sospechoso en su ruta TEMPLATE_DIRS. Debería apuntar a la raíz de su directorio de plantillas. Además, también debería terminar en un final /
.
Solo voy a adivinar aquí que el .../admin/
directorio no es la raíz de su plantilla. Si aún desea escribir rutas absolutas, debe eliminar la referencia al directorio de plantillas de administración.
TEMPLATE_DIRS = [
'C:/django-project/myapp/mytemplates/',
]
Dicho esto, los cargadores de plantillas de forma predeterminada deben configurarse para atravesar recursivamente los directorios de su aplicación para localizar archivos de plantilla.
TEMPLATE_LOADERS = [
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
]
No debería necesitar copiar las plantillas de administración a menos que desee específicamente sobrescribir algo.
Tendrá que ejecutar un syncdb si aún no lo ha hecho. También necesitará un servidor estático de sus archivos multimedia si está alojando django a través de runserver.
os.path.join
para agregar rutas al directorio base.Si usa la configuración de Django tal como está instalada, ¿por qué no simplemente usar su BASE_DIR y PLANTILLAS predefinidos y integrados? En el pip instalado Django (v1.8), obtengo:
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', ], }, }, ]
fuente
os.path.join(BASE_DIR, 'templates')
para que la ruta sea independiente de la plataforma.Solución inteligente en Django 2.0.3 para mantener plantillas en el directorio del proyecto (
/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], ...
en views.py simplemente agregue dicha ruta de plantilla:
fuente
Para Django 1.6.6:
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
También estático y multimedia para el modo de depuración y producción:
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%
En urls.py debes agregar:
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)
En Django 1.8 puede establecer rutas de plantilla, backend y otros parámetros para las plantillas en un diccionario ( 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', ], }, }, ]
Documentos oficiales.
fuente
También tuve problemas con esta parte del tutorial (tutorial usado para la versión 1.7).
Mi error fue que solo edité la cadena 'Administración de Django' y no presté suficiente atención al manual.
Esta es la línea de django / contrib / admin / templates / admin / base_site.html :
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
Pero después de algún tiempo y frustración, quedó claro que existía la declaración 'site_header o default: _', que debería eliminarse. Entonces, después de eliminar la declaración (como en el ejemplo del manual, todo funcionó como se esperaba).
Manual de ejemplo:
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
fuente
Está bien 😁 Digamos que usted tiene un nuevo proyecto, si así se va a ir al
settings.py
archivo y buscarTEMPLATES
una vez que lo has visto que acaba de pegar esta líneaos.path.join(BASE_DIR, 'template')
en'DIRS'
Al final, usted debe conseguir algunas cosas como esta: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', ], }, }, ]
Si desea saber dónde se encuentra su directorio BASE_DIR, escriba estos 3 comandos simples:
Una vez que esté en el caparazón:
>>> from django.conf import settings >>> settings.BASE_DIR
PD: Si le asignó otro nombre a la carpeta de su plantilla, también lo cambiaría aquí.
fuente
En django 3.1, vaya a la configuración de su proyecto e importe el sistema operativo
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', ], }, }, ]
fuente
En django 2.2 esto se explica aquí
https://docs.djangoproject.com/en/2.2/howto/overriding-templates/
import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) INSTALLED_APPS = [ ..., 'blog', ..., ] TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, ... }, ]
fuente
Básicamente
BASE_DIR
es el directorio del proyecto de django, el mismo directorio dondemanage.py
está.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', ], }, }, ]
fuente
Al contrario de algunas respuestas publicadas en este hilo, agregar
'DIRS': ['templates']
no tiene ningún efecto ya que 'plantillas' es la ruta predeterminada donde Django busca plantillas.Si está intentando hacer referencia a la plantilla de una aplicación, asegúrese de que su aplicación esté en la lista del
INSTALLED_APPS
proyecto principalsettings.py
.INSTALLED_APPS': [ # ... 'my_app', ]
fuente