在django项目中放置模板的最佳位置是什么?
Answers:
从Django的书中,第4章:
如果您想不到放置模板的明显位置,建议您在Django项目中创建一个模板目录(即,如果您一直跟随我们的示例,请在第2章中创建的mysite目录中)。
这正是我所做的,对我来说非常有用。
我的目录结构如下所示:
/media
用于我所有的CSS / JS / images等
/templates
,
/projectname
用于主项目代码(即Python代码)的模板
放置在 <PROJECT>/<APP>/templates/<APP>/template.html
特定于应用程序的模板,以帮助使该应用程序可在其他地方重用。
对于一般的“全局”模板,我将其放入 <PROJECT>/templates/template.html
<APP>
秒之内的原因<PROJECT>/<APP>/templates/<APP>/template.html
吗?
TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRS
现在已经过时-你应该改为添加DIRS=[os.path.join(BASE_DIR, "templates")]
到TEMPLATES
-看stackoverflow.com/questions/29725132/...
跟着Dominic和dlrust,
我们使用setuptools源代码分发(sdist)打包django项目和应用程序,以部署在我们的不同环境中。
我们发现模板和静态文件需要在django应用程序目录下,以便可以通过setuptools打包。
例如,我们的模板和静态路径如下所示:
PROJECT/APP/templates/APP/template.html
PROJECT/APP/static/APP/my.js
为此,需要修改MANIFEST.in(请参阅http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template)
MANIFEST.in的示例:
include setup.py
recursive-include PROJECT *.txt *.html *.js
recursive-include PROJECT *.css *.js *.png *.gif *.bmp *.ico *.jpg *.jpeg
另外,您需要在django设置文件中确认app_directories加载程序在TEMPLATE_LOADERS中。我认为在Django 1.4中默认存在。
django设置模板加载器的示例:
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
以防万一,您想知道为什么我们使用sdists而不是仅仅处理rsync文件;这是我们配置管理工作流程的一部分,在该工作流程中,我们有一个单独的构建tarball,而PIP却未更改地部署到测试,验收和生产环境中。
/static/
考虑模板和模块化应用时,+ 1智能可将其包含在布局计划中。您可能要提到另一种最佳做法,将css
文件放在一个名为static/app/css
forjs
和也许jpg
或者只是的文件夹中/static/app/images
。
丹哥1.11
在manage.py存在的地方添加模板文件夹,这是您的基本目录。在您的settings.py中按以下所示更改TEMPLATES的DIRS
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
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',
],
},
},
]
现在通过使用代码来使用模板,
def home(request):
return render(request,"index.html",{})
在views.py中。这对于Django 1.11完全正常
Django 1.10
TEMPLATE_DIRS
不推荐使用。
现在我们需要使用TEMPLATE
,在Django 1.8中进行如下介绍:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
# ... some options here ...
},
},
]
一旦定义了TEMPLATES,就可以安全地删除ALLOWED_INCLUDE_ROOTS,TEMPLATE_CONTEXT_PROCESSORS,TEMPLATE_DEBUG,TEMPLATE_DIRS,TEMPLATE_LOADERS和TEMPLATE_STRING_IF_INVALID。
关于最佳位置,Django寻找这样的模板:
详细信息:https : //docs.djangoproject.com/en/1.10/topics/templates/#configuration
您也可以考虑使用django-dbtemplates将模板存储在数据库中。它还设置用于缓存,以及django-version应用程序,可帮助您保留模板的旧版本。
它工作得很好,但是我希望在文件系统端的导入/同步方面具有更多的灵活性。
[编辑:2018年8月20日-该存储库不可用,同一个名称的存储库可在https://github.com/jazzband/django-dbtemplates获得,并于8个月前更新。我不再以任何有意义的方式使用Django,因此无法保证。