【问题标题】:Django override template static file locationDjango覆盖模板静态文件位置
【发布时间】:2014-06-06 10:02:39
【问题描述】:

如果我要覆盖已安装应用程序的模板,我会将 .html 文件放在 /templates/appname/ 中。我想知道为那些被覆盖的模板存储静态文件的正确位置在哪里?

我会把它们放在/common_static/appname 中吗?是否有更好的位置或方式将模板全部覆盖?

例如。应用名为通知:

├── common_static
│   ├── notifications
│       ├── css
│           ├── styles.css
│       ├── js
│           ├── anim.js


├── templates
│   ├── base.html
│   ├── notifications
│       ├── file1.html
│       ├── file2.html

【问题讨论】:

    标签: python django django-templates django-staticfiles


    【解决方案1】:

    有多种方法可以在 Django 中存储模板和静态数据。 以下是可以使用的两种架构:

    A.你上面提到的那个:

    /templates - 使用文件夹 app_name 存储项目的所有模板 存储应用特定的模板

    /static - 存储所有静态 使用文件夹 app_name 存储应用特定模板的项目

    • 这是很有用的,因为您将知道所有项目的模板和静态文件在哪里。

    • 它也更容易管理并且更少的机会名称冲突。

    B.在特定应用中存储模板和静态数据:

    templates - 仅存储项目级别的模板,例如base.html, 404.html等

    app_name>/templates - 存储与该特定应用相关的所有模板。

    static - 仅存储项目级别的静态数据,例如favicon.ico 等

    app_name/static - 存储与该特定应用相关的所有静态数据。

    • 如果你想构建独立的应用程序,这很有用,可以 独立使用。

    • 但在这种情况下,名称冲突的可能性更大,所以您 必须遵循一些命名约定,例如前缀“app_name_” 在模板名称或其他名称之前。

    此外,您必须将这些模板和静态路径添加到 Django 中的 TEMPLATE_DIRS 和 STATICFILES_DIRS 设置,例如

    TEMPLATE_DIRS = (<app_name>/templates,)
    STATICFILES_DIRS = (<app_name>/static,)
    

    您必须运行 ./manage.py collectstatic 才能让您的静态数据在生产模式下工作(即 DEBUG = False)

    【讨论】:

      【解决方案2】:

      您可以将它们存储在任何您想要的位置。没有“合适的位置”,但您必须:

      确保 Django 将包含您的静态模板文件的目录识别为 模板目录

      来自 Django 文档:

      Django 在很多地方搜索模板目录, 取决于您的模板加载器设置(请参阅下面的“加载器类型”), 但指定模板目录的最基本方法是使用 TEMPLATE_DIRS 设置。

      要添加/更改模板目录,请在设置文件中使用 TEMPLATE_DIRS 元组。例如:

      TEMPLATE_DIRS = (
      "/home/html/templates/template.html",
      "/home/html/templates/default",
      )
      

      【讨论】:

        猜你喜欢
        • 2012-02-25
        • 2023-03-23
        • 2013-06-18
        • 2017-01-10
        • 2020-02-18
        • 2017-11-24
        • 2014-05-20
        • 2017-07-06
        • 2015-04-15
        相关资源
        最近更新 更多