我正在Windows 7环境中关注http://docs.djangoproject.com/en/dev/intro/tutorial02/#intro-tutorial02上的教程.我的设置文件是:
TEMPLATE_DIRS = (
'C:/django-project/myapp/mytemplates/admin'
)
Run Code Online (Sandbox Code Playgroud)
我base_template从admin/base_site.htmlDjango本身的源代码(django/contrib/admin/templates)中的默认Django管理模板目录中获取模板到教程指示的myapp目录的admin子目录中.
它似乎没有因某种原因而生效.可能是什么问题的任何线索?我必须做同步数据库吗?
dig*_*mer 172
我知道这不是在Django教程中,并且对它们感到羞耻,但最好为路径变量设置相对路径.您可以这样设置:
import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
...
MEDIA_ROOT = PROJECT_PATH + '/media/'
TEMPLATE_DIRS = (
PROJECT_PATH + '/templates/',
)
Run Code Online (Sandbox Code Playgroud)
这样您就可以移动Django项目,并且您的路径根将自动更新.这在您设置生产服务器时很有用.
其次,你的TEMPLATE_DIRS路径有一些可疑之处.它应该指向模板目录的根目录.此外,它也应该以尾随结束/.
我只是猜测这个.../admin/目录不是你的模板根目录.如果您仍想编写绝对路径,则应该取出对admin模板目录的引用.
TEMPLATE_DIRS = (
'C:/django-project/myapp/mytemplates/'
)
Run Code Online (Sandbox Code Playgroud)
话虽如此,默认情况下,模板加载器应设置为递归遍历到您的应用程序目录以查找模板文件.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)
Run Code Online (Sandbox Code Playgroud)
除非您特别想要覆盖某些内容,否则您不需要复制管理模板.
如果尚未运行syncdb,则必须运行它.如果你通过runserver托管django,你还需要静态服务你的媒体文件.
Nat*_*anQ 30
如果安装使用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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
小智 9
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],
...
Run Code Online (Sandbox Code Playgroud)
在views.py中添加这样的模板路径:
app_name/html_name
Run Code Online (Sandbox Code Playgroud)
对于Django 1.6.6:
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = os.path.join(BASE_DIR, 'templates')
Run Code Online (Sandbox Code Playgroud)
用于调试和生产模式的静态和媒体:
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%
Run Code Online (Sandbox Code Playgroud)
进入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)
Run Code Online (Sandbox Code Playgroud)
在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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
我也对本教程的这一部分有问题(使用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>
Run Code Online (Sandbox Code Playgroud)
但经过一段时间和挫折后,很明显有'site_header或default:_'语句,应该删除.因此在删除语句之后(就像手册中的示例一样,所有工作都像预期的那样).
手册示例:
<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
Run Code Online (Sandbox Code Playgroud)
小智 5
在 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',
],
},
},
]
Run Code Online (Sandbox Code Playgroud)
与此线程中发布的一些答案相反,添加\'DIRS\': [\'templates\']没有任何效果 - 它是多余的 - 因为这templates是 Django 在每个应用程序中查找模板的默认路径。
如果您尝试引用应用程序的模板,请确保您的应用程序位于INSTALLED_APPS主项目的列表中settings.py。
INSTALLED_APPS\': [\n # ...\n \'my_app\',\n]\nRun Code Online (Sandbox Code Playgroud)\n引用 Django 的模板文档:
\n\n\n类 DjangoTemplates\xc2\xb6
\n将 BACKEND 设置为 \'django.template.backends.django.DjangoTemplates\' 以配置 Django 模板引擎。
\n当 APP_DIRS 为 True 时,DjangoTemplates 引擎会在已安装应用程序的templates子目录中查找模板。保留这个通用名称是为了向后兼容。
\n
templates当您为项目创建应用程序时,应用程序目录中没有目录。默认情况下,Django admin 不会为您创建目录。
下面是 Django教程文档中的另一段,更加清晰:
\n\n\n你的project\xe2\x80\x99s TEMPLATES 设置描述了Django 如何加载和渲染模板。默认设置文件配置 DjangoTemplates 后端,其 APP_DIRS 选项设置为 True。按照惯例,DjangoTemplates 在每个 INSTALLED_APPS 中查找 \xe2\x80\x9ctemplates\xe2\x80\x9d 子目录。
\n
| 归档时间: |
|
| 查看次数: |
135427 次 |
| 最近记录: |