单个项目,多个应用的需求是很常见的,总结下如何建立:
项目:learning_log
3个应用:Learning_logs, meal_apps, pizzas
1,把多个apps目录组织好
比如多个apps folders(Learning_logs, meal_apps, pizzas)与project_folder (learning_log)平行,不能放进子目录
这里,manage.py 指向了 learning_log 里的setting.py.
2,Project_folder\setting.py 添加多个app
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'learning_logs',
'pizzas',
‘meal_apps’,
]
3,Project_folder\urls.py
分别定义apps' URLs.
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from learning_logs.views import index #指定默认index 从learning_logs app来
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^$',index,name='index'),
# url(r'', include(('learning_logs.urls','learning_logs'), namespace ='learning_logs')),
url(r'pizzas/', include(('pizzas.urls','pizzas'), namespace='pizzas')),
url(r'learning_logs/', include(('learning_logs.urls','learning_logs'), namespace ='learning_logs')),
url(r'meal_apps/', include(('meal_apps.urls','meal_apps'), namespace='meal_apps')),
]]
4,Apps 的models.py, admin.py分别管理,保持不变,
分别的models.py 结构会自动建立到数据库中,数据也会存储在同一个数据库文件中,即manage.py 同目录的那个db.sqlite3。并不需要一个models.py里包含所有apps的models。这个还是挺神奇和方便的,用shell 访问验证过。
同理,分别的admin.py 独立维护,Admin界面会自动综合多个admin.py 注册的models,用于管理。
5,Apps 的 urls.py,views.py各自定义,app间保持独立
跟普通单个app一样,自身一致即可。
6,Apps 的 templates 子目录下层目录名最好跟app 同名,
这样避免重复,养成好习惯。如
C:\Users\ThinkPad\tmp\virtual_env\pizzas\templates\pizzas
C:\Users\ThinkPad\tmp\virtual_env\meal_apps\templates\meal_apps
否则调用时,如遇子目录重名,网页内容会串!!
并与view.py保持一致,
def index(request):
return render(request,'pizzas/index.html')
7,Apps 的 子html模板,可以继承主应用的base.html这样方便统一设计。
比如:C:\Users\ThinkPad\tmp\virtual_env\pizzas\templates\pizzas\topic.html 继承主应用learning_logs的base.html
{% extends "learning_logs/base.html"%}
总体感觉,Django MVC结构还是很友好、灵活的。有兴趣可以看【脑图】Django MVC 篇