python - template - Ruta de la plantilla Django
ifequal django (5)
Estoy siguiendo el tutorial en http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 en un entorno de Windows 7. Mi archivo de configuración es:
TEMPLATE_DIRS = (
''C:/django-project/myapp/mytemplates/admin''
)
base_template
la base_template
desde la plantilla admin/base_site.html
desde el directorio predeterminado de plantilla de administración de Django en el código fuente de Django (django / contrib / admin / templates) en un subdirectorio admin del directorio myapp como se indica en el tutorial.
No parece afectar por alguna razón. ¿Alguna pista de lo que podría ser el problema? ¿Tengo que hacer una sincronización db?
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, back-end y otros parámetros para 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'',
],
},
},
]
Sé que esto no está en el tutorial de Django, y les tengo vergüenza, pero es mejor establecer rutas relativas para las variables de ruta. Puede configurarlo de esta manera:
import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
...
MEDIA_ROOT = PROJECT_PATH + ''/media/''
TEMPLATE_DIRS = (
PROJECT_PATH + ''/templates/'',
)
De esta forma, 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. Debe señalar a la raíz de su directorio de plantilla. Además, también debe terminar en un seguimiento /
.
Voy a adivinar aquí que el directorio .../admin/
no es tu raíz de plantilla. Si aún desea escribir rutas absolutas, debería eliminar la referencia al directorio de plantilla de administrador.
TEMPLATE_DIRS = (
''C:/django-project/myapp/mytemplates/''
)
Habiendo dicho eso, los cargadores de plantillas por defecto deben configurarse para atravesar recursivamente los directorios de tus aplicaciones para localizar los archivos de plantillas.
TEMPLATE_LOADERS = (
''django.template.loaders.filesystem.load_template_source'',
''django.template.loaders.app_directories.load_template_source'',
# ''django.template.loaders.eggs.load_template_source'',
)
No debería necesitar copiar las plantillas de administrador a menos que desee específicamente sobrescribir algo.
Tendrá que ejecutar un syncdb si aún no lo ha ejecutado. También tendrá que server estáticamente sus archivos de medios si está alojando django a través de runserver.
Si usa la configuración de Django tal como está instalada, ¿por qué no simplemente usar su BASE_DIR predefinido y PLANTILLAS horneados? 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'',
],
},
},
]
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 agrega dicha ruta de plantilla:
app_name/html_name
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 un tiempo y la frustración se hizo evidente que existía la declaración ''site_header o por defecto: _'', 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>