104 votes

Chemin du template Django

Je suis en suivant le tutoriel sur http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 dans un environnement Windows 7. Mon fichier de paramètres est:

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

J'ai eu l' base_template à partir du modèle admin/base_site.html à partir de l'intérieur de la valeur par défaut de Django admin répertoire de modèle dans le code source de Django lui-même (django/contrib/admin/templates) dans un sous-répertoire admin de répertoire myapp que le tutoriel suivant les instructions.

Il ne semble pas prendre effet pour une raison quelconque. Aucune idée de ce que pourrait être le problème? Dois-je faire une synchronisation de db?

208voto

digitaldreamer Points 11102

Je sais que ce n'est pas dans la Django tutoriel, et honte à eux, mais il est préférable de configurer les chemins d'accès relatifs pour vos variables de chemin d'accès. Vous pouvez le configurer comme suit:

import os

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

...

MEDIA_ROOT = PROJECT_PATH + '/media/'

TEMPLATE_DIRS = (
    PROJECT_PATH + '/templates/',
)

De cette façon, vous pouvez déplacer votre projet Django et votre chemin racines se mettra à jour automatiquement. Ceci est utile lors de la configuration de votre serveur de production.

Deuxièmement, il y a quelque chose de suspect à votre TEMPLATE_DIRS chemin. Elle doit pointer vers la racine de votre répertoire de modèle. Aussi, il devrait également mettre fin à une fuite en /.

Je vais juste suppose ici que l' .../admin/ répertoire n'est pas votre modèle de racine. Si vous voulez continuer à écrire des chemins absolus, vous devriez prendre la référence à l'administrateur répertoire de modèle.

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

Avec cela étant dit, les chargeurs de modèle par défaut doit être définie de manière récursive jusqu'à traverser dans votre application répertoires pour localiser les fichiers de modèle.

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
#     'django.template.loaders.eggs.load_template_source',
)

Vous ne devriez pas avoir besoin de copier les modèles d'administration, sauf si vous souhaitez écraser quelque chose.

Vous devez exécuter un syncdb si vous n'avez pas encore l ' exécuter. Vous aurez également besoin de statiquement serveur de vos fichiers multimédia lorsque vous êtes l'hôte de django par runserver.

9voto

Maxim Dunaevsky Points 18

Pour Django 1.6.6:

 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
 

Aussi statique et multimédia pour le mode débogage et production:

 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%
 

Dans urls.py vous devez ajouter:

 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)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X