代码之家  ›  专栏  ›  技术社区  ›  Augusto Samamé Barrientos

Django文件夹,而不将其注册为应用程序

  •  0
  • Augusto Samamé Barrientos  · 技术社区  · 4 年前

    在这里学习Django。

    我继承了一个Django项目,我了解到我们可以用应用程序来封装功能。为此,我必须创建一个这样的应用程序:

    django-admin startapp my_app

    然后将应用程序添加到 settings.py

    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'my_project.my_app',
    )
    

    这个很好用。

    不过,我在Django项目中发现了一些文件夹,例如名为:

    /my_feature
    

    有它自己的 urls.py 文件、模型和视图文件,就像一个应用程序。 my_feature 功能性很好。请求被路由,视图被调用,等等。。。

    但是,它们不存在于 作为一个应用程序。 我的功能 哪里也找不到 INSTALLED_APPS 或者其他地方(搜索了整个项目,什么也没有)。

    已安装的应用程序 ?

    0 回复  |  直到 4 年前
        1
  •  0
  •   Melvyn    4 年前

    要解释已安装应用程序的详细信息,请执行以下操作:

    • 您可以导入的任何内容都不会(间接)导入以下任何内容,您可以在未安装的应用程序中导入和使用
    • 模板、静态文件、模板标记库(“自定义标记”)、模型和任何可能需要的初始化代码(如信号注册)都需要在已安装的应用程序中才能找到。这一切都是由 apps 框架。

    灰色区域:你可以在其他地方注册模板标签库,但在安装的应用程序中安装应用程序将确保它自动加载。

    初始化代码应该在 ready() .

    原因:

    模型和模板库可以通过字符串引用:

    class Pizza(models.Model):
     # Reference to app bakery, with model that lowercases to topping
        topping = models.ForeignKey('bakery.topping')
    
    {# Reference to a template library in some app,
    for which the name is globally unique within the project #}
    {% load mytags %} 
    

    模板和静态文件,需要使用一组基本目录进行解析。两者都可以配置为一个单独的列表,但是apps框架还会在每个注册的应用程序中查找子目录“static”和“templates”,并将它们添加到解析器中。