Saya tahu ini tidak ada dalam tutorial Django, dan memalukannya, tapi lebih baik untuk menyiapkan jalur relatif untuk variabel jalur Anda. Anda dapat mengaturnya seperti ini:
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/'),
]
Dengan cara ini Anda dapat memindahkan proyek Django Anda dan akar jalur Anda akan diperbarui secara otomatis. Ini berguna saat Anda menyiapkan server produksi Anda.
Kedua, ada sesuatu yang mencurigakan pada jalur TEMPLATE_DIRS Anda. Ini harus mengarah ke root direktori template Anda. Juga, itu juga harus diakhiri dengan sebuah trailing /
.
Saya hanya akan menebak di sini bahwa .../admin/
direktori tersebut bukan root template Anda. Jika Anda masih ingin menulis jalur absolut, Anda harus mengambil referensi ke direktori template admin.
TEMPLATE_DIRS = [
'C:/django-project/myapp/mytemplates/',
]
Karena itu, pemuat template secara default harus disiapkan untuk melintasi direktori aplikasi Anda secara rekursif untuk menemukan file template.
TEMPLATE_LOADERS = [
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
]
Anda tidak perlu menyalin template admin kecuali jika Anda secara khusus ingin menimpa sesuatu.
Anda harus menjalankan syncdb jika Anda belum menjalankannya. Anda juga perlu server file media Anda secara statis jika Anda hosting django melalui runserver.
os.path.join
untuk menambahkan jalur ke dir basis.Jika menggunakan pengaturan Django seperti yang terinstal, lalu mengapa tidak menggunakan baked-in, BASE_DIR dan TEMPLATES yang telah ditentukan sebelumnya? Di pip yang dipasang Django (v1.8), saya mendapatkan:
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', ], }, }, ]
sumber
os.path.join(BASE_DIR, 'templates')
untuk jalur agar tidak bergantung pada platform.Solusi cerdas dalam Django 2.0.3 untuk menyimpan templat dalam direktori proyek (
/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], ...
di views.py cukup tambahkan jalur template seperti itu:
sumber
Untuk Django 1.6.6:
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
Juga statis dan media untuk mode debug dan produksi:
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%
Ke urls.py Anda harus menambahkan:
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)
Dalam Django 1.8 Anda dapat menyetel jalur templat, backend dan parameter lain untuk templat dalam satu kamus ( 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', ], }, }, ]
Dokumen resmi.
sumber
Saya juga mengalami masalah dengan bagian tutorial ini (tutorial yang digunakan untuk versi 1.7).
Kesalahan saya adalah saya hanya mengedit string 'administrasi Django', dan tidak cukup memperhatikan manual.
Ini adalah baris dari django / contrib / admin / templates / admin / base_site.html :
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
Namun setelah beberapa waktu dan frustrasi, menjadi jelas bahwa ada pernyataan 'site_header atau default: _', yang harus dihapus. Jadi setelah menghapus pernyataan (seperti contoh di manual semuanya bekerja seperti yang diharapkan).
Contoh manual:
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
sumber
Baiklah 😁 Katakanlah Anda memiliki proyek baru, jika demikian Anda akan pergi ke
settings.py
file dan mencariTEMPLATES
begitu Anda menemukannya, Anda cukup menempelkan baris inios.path.join(BASE_DIR, 'template')
di'DIRS'
Akhir, Anda akan mendapatkan sesuatu seperti ini: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', ], }, }, ]
Jika Anda ingin tahu di mana direktori BASE_DIR Anda berada, ketikkan 3 perintah sederhana ini:
Setelah Anda berada di shell:
>>> from django.conf import settings >>> settings.BASE_DIR
PS: Jika Anda menamai folder template Anda dengan nama lain, Anda juga akan mengubahnya di sini.
sumber
Dalam django 3.1, masuk ke pengaturan proyek Anda dan impor os
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', ], }, }, ]
sumber
Dalam django 2.2 ini dijelaskan di sini
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, ... }, ]
sumber
pada dasarnya
BASE_DIR
adalah direktori proyek django Anda, direktori yang sama di manamanage.py
.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', ], }, }, ]
sumber
Bertentangan dengan beberapa jawaban yang diposting di utas ini, menambahkan
'DIRS': ['templates']
tidak berpengaruh karena 'cetakan' adalah jalur default dimana Django mencari cetakan.Jika Anda mencoba mereferensikan template aplikasi, pastikan aplikasi Anda ada dalam daftar
INSTALLED_APPS
di project utamasettings.py
.INSTALLED_APPS': [ # ... 'my_app', ]
sumber