Django:如何重新分发包含可扩展HTML模板的项目/应用程序?

时间:2013-09-07 16:57:22

标签: python django templates django-templates pip

我正在阅读Django教程How to write reusable apps。我试图找出如何打包HTML基本模板,以便安装我的应用程序(通过点)的人可以扩展它们(例如使用{% extends %}。)当我导入python模块时,我不必知道它文件系统上的位置,但Django模板的情况如何?

(旁注:我的项目由管道组成,可以更容易地编写特定类型的应用程序。所以我有各种抽象基类[模型,视图,表单],模板标签,URL配置和HTML用户可以继承的模板。它还包含Django Admin的自定义。现在它是一个项目,但我试图将它打包为一个应用程序,因为根据我正在阅读的内容,这似乎是打包Django代码的正确方法,但也许我应该采用不同的方式。)

1 个答案:

答案 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'),
)

然后按以下顺序加载模板:

  1. 从项目目录中解析模板
  2. 从应用目录中解析模板
  3. 以下是遵循此结构的示例项目:https://github.com/brutasse/django-password-reset