variable template ifequal examples dirs python django

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

Documentos oficiales


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>