应用和分布式路由

本文详细介绍了Django中如何创建应用、注册应用以及设置分布式路由。主路由通过include函数将请求分发到各应用的urls.py进行处理。在应用内,配置urls.py并定义视图函数,处理特定的请求。同时,文章还探讨了模板的层级查找机制,并给出了模板文件的组织方式以及视图函数的相应调整。通过实例展示了在news应用中创建模板文件夹和模板文件的过程,强调了模板查找的优先级问题及其解决方案。
摘要由CSDN通过智能技术生成

应用:

  1. 创建应用文件夹:python manage.py startapp app_name
  2. 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到底创建了什么应用,注册功能

分布式路由

主路由配置文件可以不处理用户具体路由,令主路由做请求的分发工作(分布式请求处理)
具体处理路线:
在这里插入图片描述
主路由负责分发工作,具体映射到哪个视图函数的工作由分发下去的应用处理。

配置分布式路由

  1. 主路由中配置include函数
    语法:include('具体分发到的应用文件夹的名称.url_name')
    作用:用于将当前路由转到各个应用的路由配置文件的urlpatterns进行分布式处理
  2. 应用中配置urls.py(需要手动创建)
    其中的配置结构同主路由完全一致,其中path第一个参数为主路由匹配的路由前缀的后半部分,因为前面的部分已经被主路由匹配了。

样例:

  1. 主路由:
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层)

应用内部可以手动配置模板目录:

  1. 应用下手动创建templates文件夹
  2. 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')
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值