Django项目App内部的独立文件
独立url(子路由)
之前的路由都写在主urls下,现在要开始写每一个app自己的子路由
编写自己的子路由
在app下新建urls.py,urls.py中的内容如下:from django.contrib import admin from django.urls import path from app01 import views urlpatterns = [ path('wang11/', views.wang11), ]views.py中的内容如下:
from django.shortcuts import render def wang11(request): return render(request,'wang11.html')templates下写入html文件:省略
以上步骤所需目录如下:
主目录包含子目录
主目录的内容如下:
from django.contrib import admin from django.urls import path,include 使用include,让主路由连接到子路由,Django中的url访问的时候默认找主路由为了让浏览器可以访问到子路由,可以加入include,include()中加入app的url地址,这样就能找到子路由,让后在子路由里面寻径。 与原来配置不一样的就是在新建的app中加入urls.py子路由文件,在urls.py中加入子路径 urlpatterns = [ path('admin/', admin.site.urls), path('app01/',include('app01.urls')), path('app02/',include('app02.urls')), path('app03/',include('app03.urls')), ]访问路径时,主路径+子路径
独立模板文件
举例说明:如果在外层的templates中和app01、app02中分别创建index.html,默认访问外层templates中的index.html文件,如果templates中不存在,则按照settings.py中App的注册顺序进行加载。
每一个app下的templates下都要建立一个与app名称相同的目录,然后在这个目录下建立html文件。
项目文件下的urls.py中的内容如下:
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('app01/',include('app01.urls')), path('app02/',include('app02.urls')), ]app01
应用app01下的urls.py中的内容如下:
from django.urls import path from app01 import views urlpatterns = [ path('wang1/',views.wang1), path('wang2/',views.wang2), ]应用app01下的views.py中的内容如下:
from django.shortcuts import render # Create your views here. def wang1(request): return render(request,'app01/wang1.html') 先去外部templates文件夹下的目录找有没有app01目录,如果没找到的话就就找应用app01目录下的templates下的app01,这样就可以 找app01下的wang1.html到了。 def wang2(request): return render(request,'app01/wang2.html')应用app01下的templates下的app01下的wang1.html文件中的内容如下:
<body> app01---11111 </body>在浏览器输入http://127.0.0.1:8000/app01/wang1/结果如下
app02
应用app02下的urls.py中的内容如下:
from django.urls import path from app02 import views urlpatterns = [ path('wang1/',views.wang1), ]应用app02下的views.py中的内容如下:
from django.shortcuts import render def wang1(request): return render(request,'wang1.html')应用app02下的templates下的app02下的wang1.html文件中的内容如下:
<body> app02---1111 </body>在浏览器输入http://127.0.0.1:8000/app02/wang1/结果如下
结果不是应用app02下的templates下的app02下的wang1.html文件中的内容,而是外部templates中的内容,这是为什么呢?
原因在于views.py中的方法wang1返回的时候返回的是 return render(request,'wang1.html'),这样默认从外部模板中找有没有对应的wang1.html文件,如果有的话就把文件显示,没有的话就按照注册的app顺序搜索app中的templates下的文件,在外部templates下有wang1.html文件,所以就把文件返回。
怎么解决这个问题呢?
在app02下的templates目录下建立app02目录(和对应app的名字相同),目录下存放html文件,然后返回的时候返回内容为return render(request,'app02/wang1.html'),这样就可以让路径找到本app的html文件了。
运行如下:
独立静态文件
如图所示在应用中建立static文件,在文件下建立对应的app01文件
{% load static %}加载静态文件,静态文件引入时为{% static 'app01/1.png' %},不加app01的话会从外部的static中查找,如果外部没有static目录或static目录下没有1.png这张图片就查找不到。