【问题标题】:Base Template in reusable Django App可重用 Django 应用程序中的基本模板
【发布时间】:2016-08-01 19:48:28
【问题描述】:

我想从自定义项目创建一个可重用的应用程序。

我想移动到可重用应用程序的部分服务于整个页面并在顶部使用:

{% extends "myproject/base.html" %}

现在我不确定要使用什么基本模板。在新的可重用应用程序中,我不想使用myproject,因为这是我无法共享的自定义代码。

我试图从伟大的 django 文档中获得帮助,但找不到解决方案 - 如果我失明了,请原谅我 :-)

在可重用应用程序中在这里写什么?

{% extends ??????? %}

【问题讨论】:

    标签: django django-templates reusability


    【解决方案1】:

    您需要将这些模板存储在 app 文件夹中。

    假设您有一个类似myproject/myreusableapp 的结构,您将在 myreusableapp 文件夹中创建一个模板文件夹并将您的 base.html 文件存储在那里。

    然后您将扩展该文件{% extends "myreusableapp/base.html" %}

    【讨论】:

    • 我没有myproject/myreusableapp 的目录结构,因为我希望 myreusableapp 是一个 pip 可安装的 python 包。但是{% extends "myreusableapp/base.html" %} 看起来不错。 ...... 可是等等。 “myreusableapp/base.html”是什么样的?我想它应该使用某种“扩展”来获取包含项目的页眉和页脚。
    • django-allauth 是包含模板的包的一个很好的例子。也许看看那个代码以获得一个真实的例子,在allauth/templates 目录中。 github.com/pennersr/django-allauth
    • 感谢您的链接。模式是“myreusableapp/base.html”包含一行:{% extends "base.html" %}。见github.com/pennersr/django-allauth/blob/master/allauth/…
    • 表单和小部件的媒体要求(JS/CSS 文件)是否会进入响应?
    • 大多数第 3 方应用程序不接触模板,因为每个人的模板样式都不同。少数具有模板的 3rd 方应用程序要么提供原始的、无样式的模板 (django-allauth) 并允许用户覆盖它们,要么提供基于知名 css 库的模板包 (django-crispy-forms),例如引导或实现,以及在必要时使用更多模板包进行扩展的能力。底线是所有的 py 代码都可以相同,但每个人通常需要不同的模板样式,因此在可重用的应用程序包中没有那么多。
    【解决方案2】:

    很遗憾,django 没有在这里提供正式的约定。

    有一个第三方文档项目为可重用模板定义了这些规则:

    https://django-reusable-app-docs.readthedocs.org/en/latest/apps/templates.html

    在官方 django 文档中获得约定的问题自 2012 年起开放:

    https://code.djangoproject.com/ticket/19106

    这是我的票,已关闭,与上述重复:

    https://code.djangoproject.com/ticket/26501

    ...希望以后能达成协议。

    【讨论】:

      【解决方案3】:

      我是这样做的:

      \project
      |
      +-\main
      | |
      | +-\template
      | | |
      | | +-\mainapp
      | |   |
      | |   +-base.html
      | |   +-index.html
      | |   +-...
      | |
      | +-\static
      |   |
      |   +-css
      |   +-js
      |   +-pics
      |   +-...
      |
      +-\otherapp
        |
        +-...
      

      main 是一个用于标准操作(寻呼机、登录等)的应用程序,其中包含基本模板和静态对象。请注意,模板存储在main/templates/main/

      在项目settings.py中,不要忘记在STATICFILES_DIRS中注册main/static

      然后您可以使用{% extends 'main/base.html' %} 进行部署。

      【讨论】:

      • 我的理解是这样的:如果您在另一个名为“main2”的项目中重用“otherapp”,那么“main2”将其基本模板提供为“main/base.html”。好的,看起来和awwester提供的解决方案大致相同。如果我遗漏了什么,请纠正我。
      猜你喜欢
      • 2016-02-10
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2010-12-05
      相关资源
      最近更新 更多