我正在Windows 7环境中关注http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02上的教程。我的设置文件是:
TEMPLATE_DIRS = (
'C:/django-project/myapp/mytemplates/admin'
)
我从模板base_template
中将admin/base_site.html
从Django本身的源代码(django / contrib / admin / templates)中的默认Django管理模板目录中导入到myapp目录的admin子目录中正如教程指示的那样。
由于某种原因似乎没有影响。可能是什么问题的任何线索?我是否必须进行同步数据库?
答案 0 :(得分:163)
我知道这不在Django教程中,并且对它们感到羞耻,但最好为路径变量设置相对路径。您可以这样设置:
import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
...
MEDIA_ROOT = PROJECT_PATH + '/media/'
TEMPLATE_DIRS = (
PROJECT_PATH + '/templates/',
)
这样您就可以移动Django项目,并且您的路径根将自动更新。这在您设置生产服务器时非常有用。
其次,您的TEMPLATE_DIRS路径存在疑问。它应该指向模板目录的根目录。此外,它还应以尾随/
结尾。
我在这里猜测.../admin/
目录不是你的模板根目录。如果您仍想编写绝对路径,则应该取出对admin模板目录的引用。
TEMPLATE_DIRS = (
'C:/django-project/myapp/mytemplates/'
)
话虽如此,默认情况下,模板加载器应设置为递归遍历到您的app目录以查找模板文件。
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)
除非您特别想要覆盖某些内容,否则您不需要复制管理模板。
如果尚未运行syncdb,则必须运行它。如果你通过runserver托管django,你还需要静态服务你的媒体文件。
答案 1 :(得分:26)
如果安装使用Django设置,那么为什么不直接使用其烘焙的预定义BASE_DIR和TEMPLATES?在pip安装的Django(v1.8)中,我得到了:
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',
],
},
},
]
答案 2 :(得分:7)
对于Django 1.6.6:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
用于调试和生产模式的静态和媒体:
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%
进入urls.py,你必须添加:
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)
在Django 1.8中,您可以在一个字典中设置模板的模板路径,后端和其他参数( 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',
],
},
},
]
答案 3 :(得分:7)
Django 2.0.3中的智能解决方案,用于将模板保存在项目目录中(/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],
...
在views.py中只需添加这样的模板路径:
app_name/html_name
答案 4 :(得分:5)
本教程的这一部分(使用1.7版本的教程)也遇到了问题。
我的错误是我只编辑了Django政府'字符串,并没有对手册给予足够的重视。
这是来自 django / contrib / admin / templates / admin / base_site.html 的行:
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
但经过一段时间和挫折之后,很明显有#site_header或默认:_&#39;声明,应删除。因此,在删除语句之后(就像手册中的示例一样,所有工作都像预期的那样)。
示例手册:
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
答案 5 :(得分:2)
在django 3.1中,转到项目设置并导入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',
],
},
},
]
答案 6 :(得分:1)
与该主题中发布的一些答案相反,添加isDevToolsOpened()
无效(这是多余的),因为'DIRS': ['templates']
是Django查找模板的默认路径。
如果您尝试引用应用程序的模板,请确保您的应用程序位于主项目templates
的{{1}}列表中。
INSTALLED_APPS
引用Django的Templates文档:
类DjangoTemplates¶
将BACKEND设置为'django.template.backends.django.DjangoTemplates',以配置Django模板引擎。
当APP_DIRS为True时,DjangoTemplates引擎将查找模板 在已安装应用程序的模板子目录中。保留该通用名称是为了向后兼容。
在为项目创建应用程序时,应用程序目录内没有settings.py
目录。由于您可以在不使用模板的情况下拥有应用程序,因此Django不会创建此类目录。也就是说,您必须创建它并在其中存储模板。
这是Django Tutorial文档中的另一段内容,它更加清晰:
您项目的TEMPLATES设置描述了Django如何加载和呈现模板。默认设置文件配置DjangoTemplates后端,其APP_DIRS选项设置为True。按照惯例,DjangoTemplates在每个INSTALLED_APPS中寻找一个“模板”子目录。
答案 7 :(得分:0)
好吧,假设您有一个全新的项目,如果是这样,您将转到settings.py
文件并搜索TEMPLATES
,找到后,只需将os.path.join(BASE_DIR, 'template')
这一行粘贴到{{ 1}}最后,您应该会得到如下内容:
'DIRS'
如果您想知道BASE_DIR目录的位置,请键入以下3个简单命令:
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',
],
},
},
]
一旦进入外壳:
python3 manage.py shell
PS:如果您使用其他名称命名模板文件夹,则也可以在此处进行更改。
答案 8 :(得分:0)
在django 2.2中,这里对此进行了说明
https://docs.djangoproject.com/en/2.2/howto/overriding-templates/
const routes: Routes = [
{
path: 'main',
component: MainPage,
children: [
{
path: 'tab1',
loadChildren: '../tab1/tab1.module#Tab1Module'
},
{
path: 'tab2',
loadChildren: '../tab2/tab2.module#Tab2Module'
},
{
path: '',
redirectTo: '/main/tab1',
pathMatch: 'full'
}
]
},
{
path: '',
redirectTo: '/main/tab1',
pathMatch: 'full'
}
];
答案 9 :(得分:0)
基本上BASE_DIR
是您的Django项目目录,与manage.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',
],
},
},
]
答案 10 :(得分:0)
您可以轻松地在 settings.py 文件夹中添加模板文件夹,os.path 在 django 3.1 中已弃用,因此您可以使用 path 而不是 os.path。你只需要在settings.py中导入path,你必须指定基目录,然后你必须指定模板路径,最后但并非最不重要的是,你必须在TEMPLATES = [{}]中添加模板文件夹路径,对于例子:
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
TEMPLATE_DIR = Path(BASE_DIR, 'templates') (you can name TEMPLATE_DIR to any name)
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATE_DIR],
'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',
],
},
},
]