Django框架静态文件配置和URL解析

静态文件配置

1:#在django项目下创建一个static静态文件文件夹,在static文件夹下创建对应的css,img,js文件夹,用来存放css样式文件,图片和js代码,用于HTML引入
2:#在django项目的settings配置文件中,配置静态文件相关配置(setting文件的最下面)
    STATIC_URL = '/static/' #静态文件的文件路径别名,别名可以改,一般不改
    STATICFILES_DIRS = [  #静态文件的文件路径,就是创建的static的静态文件夹路径,变量必须是这个名字,django会指定这个变量名来查找文件路径
        os.path.join(BASE_DIR,'static')
    ]
    
3:HTML页面引入
{% load filter %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    #引入css文件
    <link rel="stylesheet" href="/static/css/index.css">
</head>
<body>
    {% res %}
    <h1>新项目首页</h1>
    <h1>{{ name | addhello:'你好个屁' }}</h1>
    <h1>{%  newtag '你好' '世界' %}</h1>
    #引入图片
    <img src="/static/img/1.jpg" alt="">
</body>
#引入js文件
<script src="/static/js/index.js"></script>
</html>

URL别名和反向解析

#url写法
	url(r'^home2/', views.home,name='home'),#name给路径其别名
    url(r'^index3/', views.index,name='index'),

#当页面的路径发生变化的时候,后台代码中所有的相关的路径都要发生改变,使用反向解析,使用别名的方式,就不会发生这种情况,修改路径只要在url的路由分发修改就可以了,后台中使用反向解析就可识别路径
from django.shortcuts import render,HttpResponse,redirect
from django.urls import reverse

def home(request):
    if request.method=='GET':
        return render(request,'home.html',{'name':'张达'})
    else:
        print('111')
        if request.POST.get('username')=='lijie':
            #reverse可以反向解析出别名代表的路径地址,
            return redirect(reverse('index'))

def index(request):
    return  render(request,'index.html')

#**************************************************************
#前段示例:
	<a href="{% url 'index' %}"></a>
    把路径变成{% url '路径别名' %},就可以反向解析路径

URL命名空间

路由分发 include

#在一个项目中可能有多个应用,如果使用项目的urls文件的话,不利于维护,可以使用include路由分发的方式,分发给不同的应用
1 在每个app下创建urls.py文件,写上自己app中每个页面的路径
2 在项目目录下的urls.py文件中做一下路径分发:
    from django.conf.urls import url,include
    from django.contrib import admin
    urlpatterns = [
        #当进来的路径是以app01/开头的,就会吧路径分发到app01的应用中,比如访问路径是app01/home/,以app01开头,就会home/这个路径分发给app01下面的urls文件去
        url(r'^app01/', include('app01.urls')),
        url(r'^app02/', include('app02.urls')),
    ]

命名空间namespace

#使用include分发不同路由的时候,如果在每个APP中有重复出现的路径别名,name在进行反向解析的时候,会在各个应用中查找这个路径别名,会吧最后一个查找到的路径进行解析,就会出现不是请求的app应用中那个别名的问题,使用namespace命名空间的方式,可以执行这个别名属于那个命名空间:就不会出现这个问题
示例代码:
    from django.conf.urls import url,include
	from django.contrib import admin
urlpatterns = [
    #使用namespace指定命名空间的名称,
    url(r'^app01/', include('app01.urls',namespace='app01')),
    url(r'^app02/', include('app02.urls',namespace='app02')),
      
#在每个app应用下,使用URL反向解析的时候指定别名的命名空间:
    后台:reverse('命名空间名称:别名') -- reverse('app01:home') #指定只在app01中查找这个别名,进行解析
    前段:hmtl:{% url '命名空间名称:别名' %}  -- {% url 'app01:home' %}
posted @ 2019-10-04 15:34  luckinlee  阅读(1898)  评论(0编辑  收藏  举报