【问题标题】:How do I structure Django folders with multiple tables?如何构建具有多个表的 Django 文件夹?
【发布时间】:2015-08-06 22:54:17
【问题描述】:

对于如何为使用四个表的应用程序构建文件夹感到困惑。我应该为每个表制作不同的 urls.py 并将它们放在一个文件夹中吗?我应该在每个文件夹中包含 views.py 吗?那么forms.py呢?

我的结构是这样的: db_project --> db_app

在 db_app 下有一个包含 4 个表的数据库,我们将它们分别称为 a、b、c 和 d。每个表都有一个用于向表中添加数据的表单以及一个列表视图。

我应该在db_app下创建一个a、b、c和d文件夹,然后在每个文件夹中制作url、views和forms吗?或者我应该只制作一个包含 4 个表的所有信息的文件,然后在 db_app 下的单个 urls.py 文件中处理所有路由?

另外,我可以在同一个文件夹中创建 4 个 urls.py 文件并将它们命名为 a_urls.py 等吗?还是 Django 要求名称必须是严格的 urls.py?

谢谢!

【问题讨论】:

    标签: django


    【解决方案1】:

    不,这不是必需的或不可取的。如果所有表单和表格(模型)在逻辑上都是同一个应用程序的一部分,那么请将它们全部放在您的 db_app 下。

    将您的四个表定义(models.Model 子类)放入 models.py,将您的四个表单放入 forms.py,将所有视图放入 views.py,并将这些视图的所有 url 放入 urls.py。

    如果您编写的代码在逻辑上与您现在正在编写的代码分开,例如完全独立的应用程序或相关但代表一组完全不同的功能的应用程序,则创建另一个应用程序文件夹(使用 manage. py startapp)。

    顺便说一句,如果您需要从另一个应用程序访问一个应用程序中的模型,您可以这样做,这不是问题。您只需将模型类从一个应用程序导入另一个应用程序,例如:from app3.models import MySharedModel。但在这种情况下,您似乎还不需要它。

    但是,假设您编写了一个应用程序来维护所有服装的数据库,然后您编写了一个应用程序来维护食谱列表。这些不太可能共享任何数据。但是两者都使用 auth 应用程序进行登录。如果您要为自己制作一个事件日历应用程序,那么谁知道..也许您会在日历应用程序和服装应用程序之间建立依赖关系,以便服装应用程序可以提醒你最喜欢的夏季套装需要在婚礼前一周去清洁工......

    典型的文件夹布局是:

    # the main project folder, containing manage.py
    myproject/
    # the main app, 
    # which contains your master settings.py and also master urls.py
    # it can also contain views, models etc and have full app functionality
    myproject/myproject
    # a second app
    # this also contains all the same files as usual but does not need
    # settings.py, which is gotten from the myproject/myproject/settings.py
    myproject/app2
    # a third app
    myproject/app3
    
    # your myproject/myproject/urls.py:
    from django.conf.urls import patterns, include, url
    import app2.urls
    import app3.urls    
    
    urlpatterns = patterns('',
        url(r'^app2/', include('app2.urls')),
        url(r'^app3/', include('app3.urls')),
    )
    

    然后,在 yourproject/yourproject/settings.py 中的 INSTALLED_APPS 列表中也会有“app2”和“app3”

    在此示例中,“主”应用程序没有自己的 url,但它完全可以拥有它们。如果对您有意义的话,也不必拥有多个应用程序,您可以在一个应用程序中完成所有操作。

    【讨论】:

    • 感谢您的回答。我仍然遇到的问题是如何路由网址。会有 url.com/a、url.com/b 等,每个都有 /new、/edit 等。如果我在项目 urls.py 中处理 /a /b ... 部分,它们将不会被传递到应用程序 urls.py,我将不得不使用不同的名称。我必须制作单独的 urls.py 文件吗?
    • django 鼓励您使用的文件夹结构(阻力最小的路径)是一个主 myprojectname 项目文件夹,其中至少有一个应用程序文件夹也称为 myprojectname.. 这将是您的“主”应用程序其中包含 settings.py 和您的主 urls.py。这可能是您唯一的应用程序,在这种情况下,它的 urls.py 将包含您所有视图的 url。如果它不是您唯一的应用程序,您的主 urls.py 可以包含所有其他应用程序的 urls.py。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 1970-01-01
    • 2010-11-19
    • 2014-04-19
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多