2010-06-14 31 views
71

Bir Windows 7 ortamında http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02 üzerindeki eğiticiyi izliyorum. Benim ayarlar dosyasıdır:Django şablonu Yol

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

Ben Uygulamam bir admin alt içine Django kendisi (django/Contrib/yönetici/şablonları) kaynak kodunda varsayılan Django yönetici şablon dizin içerisinde şablondan admin/base_site.html den base_template var öğretici talimat olarak dizini.

Bazı nedenlerden dolayı etkilenmiyor gibi görünüyor. Sorunun ne olabileceğine dair bir ipucu var mı? Senkronizasyon yapmak zorunda mıyım?

cevap

148

Bunun Django öğreticisinde olmadığını biliyorum ve üzerlerinde utanç duyuyorsunuz, ancak yol değişkenleriniz için göreli yollar oluşturmak daha iyidir. Öyle gibi ayarlayabilirsiniz:

import os 

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

... 

MEDIA_ROOT = PROJECT_PATH + '/media/' 

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

Bu şekilde size Django projesini taşıyabilirsiniz ve yol kökleri otomatik olarak güncellenir. Bu, üretim sunucunuzu oluştururken kullanışlıdır.

İkincisi, TEMPLATE_DIRS yolunuzdan şüphelenilen bir şey var. Şablon dizininizin kökü işaret etmelidir. Ayrıca, / numaralı bir sonda da bitmelidir.

Burada sadece .../admin/ dizininin şablon kökünüz olmadığını tahmin edeceğim. Eğer hala mutlak yollar yazmak istiyorsanız, admin şablon dizini referansını çıkarmalısınız. Bunun üzerine

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

varsayılan olarak şablon yükleyiciler yinelemeli şablon dosyalarını bulmak için uygulama dizinlere geçiş için kurulması gerektiğini, söyleniyor.

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

Özellikle bir şeyin üzerine yazmak istemiyorsanız, yönetici şablonlarını kopyalamanız gerekmez.

Henüz çalıştırmadıysanız bir syncdb çalıştırmanız gerekecek. Ayrıca, çalışma sunucusu aracılığıyla django'yu barındırıyorsanız, medya dosyalarınızı statik olarak sunuculamanız gerekir.

+1

sayesinde göreli yolu yaptım TEMPLATE_DIRS sonundaki "/ admin" çıkarmadan sürü. – shaytac

+1

Bu öneri, şablonlar dizinini proje klasörüne yerleştirir. Daha iyi bir organizasyon için, bunun yerine bir uygulamanın klasörüne koymak daha mantıklı mı? –

+0

Bu cevap için alkış! –

5
Django 1.6.6 için

: Ayrıca

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

statik ve ayıklama ve üretim modu için ortam: urls.py içine

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% 

Eklemek gerekir:

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) 

yılında Django 1.8, bir sözlükte şablon yolları, arka uç ve diğer parametreleri ayarlayabilirsiniz (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', 
      ], 
     }, 
    }, 
] 

Official docs.

+0

Şablon yolunun bir tuple olması gerekir: bu TEMPLATE_DIRS değerini kullanın = (os.path.join (BASE_DIR, 'templates'),) – renderbox

5

Ben de öğretici (sürüm 1.7 için kullanılan öğretici) bu kısmı ile sorunları vardı.

Benim hatam sadece 'Django yönetimi' dizesini düzenledim ve elkitabına yeterince dikkat etmedim.

Bu

django/Contrib/admin/templates/yöneticiden hat/base_site.html geçerli:

<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1> 

Ancak bazı zaman ve hayal kırıklığı sonra 'site_header veya varsayılan olduğunu netleşti: _ 'ifadesi kaldırılmalı. Bu yüzden ifadeyi kaldırdıktan sonra (eldeki örnekte olduğu gibi beklenen her şey gibi çalıştı).

Örnek manuel:

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1> 
21

yüklü olarak Django ayarları kullanarak, o zaman neden sadece kendi fırınlanmış-in önceden tanımlanmış BASE_DIR ve TEMPLATES kullanılmasın? Pip Django (v1.8) yüklü, ben alıyorum:

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