应用:
- 创建应用文件夹:
python manage.py startapp app_name
- 在
settings.py
中注册应用:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'music',
'sport',
'news',
]
告知Django到底创建了什么应用,注册功能
分布式路由
主路由配置文件可以不处理用户具体路由,令主路由做请求的分发工作(分布式请求处理)
具体处理路线:
主路由负责分发工作,具体映射到哪个视图函数的工作由分发下去的应用处理。
配置分布式路由
- 主路由中配置
include
函数
语法:include('具体分发到的应用文件夹的名称.url_name')
作用:用于将当前路由转到各个应用的路由配置文件的urlpatterns
进行分布式处理 - 应用中配置
urls.py
(需要手动创建)
其中的配置结构同主路由完全一致,其中path第一个参数为主路由匹配的路由前缀的后半部分,因为前面的部分已经被主路由匹配了。
样例:
- 主路由:
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
#http://127.0.0.1:8000/music/index/
path('music/', include('music.urls')),
#去找music这个应用中的url中的urlpatterns进行匹配子路由
]
子路由:
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('index/', views.show_music)
#进行细致的处理,匹配到具体的处理视图函数处理操作
]
应用下的视图函数:
from django.shortcuts import render
from django.http import HttpResponse
def show_music(request):
return HttpResponse("这是分布式路由的显示结果!")
应用下的T层(模板Templates层)
应用内部可以手动配置模板目录:
- 应用下手动创建templates文件夹
- settings.py中开启应用模板功能
TEMPLATE中的APP_DIRS的值为True即可:
默认为True,意思就是要不要去应用下的templates文件夹中寻找html文件。
实例:
在news应用下创建一个templates文件夹,创建news_index.html文件
调用一下:
news/views.py
from django.shortcuts import render
from django.http import HttpResponse
def news_view(request):
return render(request, 'news_index.html')
<h1>我是新闻频道</h1>
如果在外部同级其他应用中同样的创建一个templates文件夹,其中储存的模板文件和news应用中的模板文件同名,又或者直接在项目文件的templates中创建一个模板,模板名和news中的模板名相同,他一定会优先查找项目templates中的模板。
优先级:
项目中的模板 > 先注册的应用中的模板 > 后注册的应用中的模板
假如项目的templates中有和任何一个应用中的模板重名,那么应用在调用模板时,显示的一定是项目的主模板。
解决方案:在各个应用中的templates中创建一个和应用同名的文件夹,然后把所有的模板都放在该文件夹中,可以避免以上情况。
注意:
视图函数也应该随之稍作改动:
news/views.py
def new_index(request):
return render(request, 'news/index.html')