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文件:省略

以上步骤所需目录如下:

Django项目App内部的独立文件

 

主目录包含子目录

Django项目App内部的独立文件

主目录的内容如下:

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')),
]

访问路径时,主路径+子路径

http://127.0.0.1:8000/app01/wang11/

 独立模板文件

举例说明:如果在外层的templates中和app01、app02中分别创建index.html,默认访问外层templates中的index.html文件,如果templates中不存在,则按照settings.py中App的注册顺序进行加载。

Django项目App内部的独立文件

每一个app下的templates下都要建立一个与app名称相同的目录,然后在这个目录下建立html文件。

Django项目App内部的独立文件

项目文件下的urls.py中的内容如下:

Django项目App内部的独立文件

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中的内容如下:

Django项目App内部的独立文件

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文件中的内容如下:

Django项目App内部的独立文件

<body> app01---11111 </body>

在浏览器输入http://127.0.0.1:8000/app01/wang1/结果如下

Django项目App内部的独立文件

app02

应用app02下的urls.py中的内容如下:

Django项目App内部的独立文件

from django.urls import path
from app02 import views
urlpatterns = [
    path('wang1/',views.wang1),
]

应用app02下的views.py中的内容如下:

Django项目App内部的独立文件

from django.shortcuts import render
def wang1(request):
    return render(request,'wang1.html')

应用app02下的templates下的app02下的wang1.html文件中的内容如下:

Django项目App内部的独立文件

<body>  app02---1111  </body>

在浏览器输入http://127.0.0.1:8000/app02/wang1/结果如下

Django项目App内部的独立文件

结果不是应用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文件了。

Django项目App内部的独立文件

Django项目App内部的独立文件

运行如下:

Django项目App内部的独立文件

独立静态文件

Django项目App内部的独立文件

如图所示在应用中建立static文件,在文件下建立对应的app01文件

Django项目App内部的独立文件

{% load static %}加载静态文件,静态文件引入时为{% static 'app01/1.png' %},不加app01的话会从外部的static中查找,如果外部没有static目录或static目录下没有1.png这张图片就查找不到。

Django项目App内部的独立文件