我正在阅读Django教程How to write reusable apps。我试图找出如何打包HTML基本模板,以便安装我的应用程序(通过点)的人可以扩展它们(例如使用{% extends %}
。)当我导入python模块时,我不必知道它文件系统上的位置,但Django模板的情况如何?
(旁注:我的项目由管道组成,可以更容易地编写特定类型的应用程序。所以我有各种抽象基类[模型,视图,表单],模板标签,URL配置和HTML用户可以继承的模板。它还包含Django Admin的自定义。现在它是一个项目,但我试图将它打包为一个应用程序,因为根据我正在阅读的内容,这似乎是打包Django代码的正确方法,但也许我应该采用不同的方式。)
答案 0 :(得分:2)
使用这样的模板目录结构:
awesome_app_name/
templates/
awesome_app_name/
base.html
cool_template.html
这允许某人使用以下内容扩展您的模板:
{% extends 'awesome_app_name/cool_template.html' %}
或者他们可以用自己的模板换掉它:
my_app_name/
templates/
my_app_name/
my_template.html
awesome_app_name/
cool_template.html <-- this overloads your template with their own
这使得共享包中的模板非常灵活。
修改强>
如果您为项目的模板目录和app_directories.Loader template loader配置django,则此方法有效。我相信这是大多数人使用的配置:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_DIR, 'templates'),
)
然后按以下顺序加载模板:
以下是遵循此结构的示例项目:https://github.com/brutasse/django-password-reset