3

我正在阅读 Django 教程如何编写可重用应用程序。我试图弄清楚如何打包 HTML 基本模板,以便安装我的应用程序(通过 pip)的人可以扩展它们(例如使用{% extends %}.)。当我导入 python 模块时,我不必知道它在文件系统上的位置,但 Django 模板是这样吗?

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

4

1 回答 1

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 模板加载器配置 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. 从应用目录解析模板

这是一个遵循此结构的示例项目:https ://github.com/brutasse/django-password-reset

于 2013-09-08T03:33:45.680 回答