简单的 Django 项目结构

Simple Django Project Structure

我已经为我的 django 项目构建了虚拟环境和根目录,这将是一个简单的活动场所网站。该网站的导航栏上将只有几个不同的选项卡,向用户显示一些场馆的具体信息,包括定价、照片库和场馆的历史。

我的问题是网上有太多关于“项目结构的最佳实践”的相互矛盾的信息。

我应该为主页和后面的每个页面创建一个应用程序,还是只创建一个包含大部分项目的核心应用程序?如果是这样的话,这个项目是不是一个很好的例子? --> https://github.com/justdjango/django-ecommerce

有人知道我可以参考的简单项目吗?

同样,这是一个非常简单的项目,只有几个 url,没有表单。

非常感谢任何花时间阅读本文并帮助我的人。

没有确切的答案:您可以根据需要组织它,Django 不会强迫您将东西 放在固定位置。支持我观点的论据:

  1. Django 的模板设置:TEMPATES['DIRS']。放入名为 'templates' 的文件夹后,它将搜索名为 templates 的文件夹所在的整个项目。你可以把它放在第一层(manage.py 旁边),或者应用程序中的五层,这都没有关系。
  2. Django 的 STATICFILES_DIRS 设置。如果 Django 希望您将静态文件放在一个目录中,它可以将参数限制为一个字符串,但它默认为一个列表,您可以随意填充。

对我来说,我喜欢 Packt 出版的一本书组织文件的方式:staticsite_statictemplates 都在基本级别。

您的应用程序现在很小,但是一旦它变大,遍历每个应用程序来访问模板会很烦人。如果您将所有内容放在一起,您可以轻松访问所有内容。

所以它是这样的:

|- project
|- app1
|- app2
|- site_static  // your custom static files
    |- css
    |- js
|- static    // bootstrap, webpack stuffs, etc.
|- media     // user uploads and images used in site
|- templates
|- manage.py
|- requirements.txt

尽管将 staticmedia 放在视线之外。没必要穿github,而且会privacy/copyright担心图片。

根据我使用 Django 的经验,没有明确的答案,这完全取决于您和您的习惯,希望这对您有所帮助。

Templates/static 个文件

我将这些模板和静态文件放在全局 templates/static 目录中,而不是在每个应用程序中,如果你是一个人或在一个小团队中工作的全栈开发人员,你可以创建每个应用程序 templates/static 目录。这真的只是一个品味问题。

[projectname]/
├── [projectname]/
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
|
|── [App1]
|── [static]/ 
|   ├── [css]
|   ├── [Javascript]
|   └── [Images]
|
|── [templates]
|── manage.py
└── requirements.txt

在我看来,您只需要一个应用程序,我们称它为 web,因为它仅用于网站。在创建存储库和数据库并使其成为 运行 之后,我在创建一个简单项目时遵循的步骤是:

  1. 创建静态、媒体和模板文件夹
  2. python manage.py startapp web
  3. 在 settings.py 文件 INSTALLED_APPS 中添加网站
  4. 将 html 文件放入模板文件夹,将其他文件夹(js、css、图像、字体..)放入 static 文件夹
  5. 将 URL 设置为 project_name 中的新应用 > urls.py
  6. web.views
  7. 中为索引页创建视图
  8. 创建url到刚刚在web.urls
  9. 中创建的视图
  10. 将index.html中的图片、js和css文件的每个链接更改为staticurl以便在python中使用。 {% load static %} 是必须的
  11. 页面现在将加载到本地主机。
  12. 创建其他 views 并在网络应用程序中将 urls 设置为其他页面,例如关于、联系等
  13. 创建您需要的模型列表并在 web.models
  14. 中定义它们
  15. 使用 web.admin
  16. 将它们传递到管理页面
  17. 通过将数据从模型传递到模板使其动态化。

希望你做对了