单个URLS文件显示普通文本页面
在我们搭建成功django 并且startproject一个django的时候,我们会发现他声成很多文件,其中urls文件是我们其中一个很重要的文件,他就是定义我们的url路径的函数。
可以打开开开这个文件,这个文件就是要用到的url路径函数,里面就是一些导入的模块,和相关函数,我们可以参照例子来写一个我们自己的
默认文件内容:
urls.py里面的内容大概基本格式如下
urlpatterns = [
path('url路径/', views视图函数,参数),
]
接下来我们需要自己定义一个url路径,方法很简单,我们只需要参照admin那条的写法即可
urlpatterns = [
path('admin/', admin.site.urls),
path('OnePath/',views.OnePath)
]
接下来在views函数中需要定义这个OnePath函数,定义如下所示
def OnePath(request):
return HttpResponse("OnePath for you")
小技巧
当我们只知道方法,不知道模块的时候,使用pycharm快捷键,鼠标放在方法上,键盘
win: ctrl + enter
mac: option + enter
接下来运行 python3 manager.py runserver 就可以使用浏览器(如如果想定义多个url可以按照上面依次定义)
http://127.0.0.1:8000/OnePath访问
单个URLS文件显示html页面
上面演示的是我们使用文本页面显示的http页面,接下来演示怎么使用html来渲染页面
在manager.py这一层创建一个templates目录,templates目录里面定义我们的html,假如我们就叫home.html
home.html内容编写如下所示,以时钟为例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>系统时间</title>
</head>
<body>
<div id="datetime">
<script>
setInterval("document.getElementById('datetime').innerHTML=new Date().toLocaleString();", 1000);
</script>
</div>
</body>
接下来我们创建的templates文件夹要指明在django工程中的路径,需要自改settings.py文件的相关配置,要把TEMPLATES项里面的DIRS由原来的空改为下面所示
'DIRS': [os.path.join(BASE_DIR,'templates')],
EMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
然后开始定义我们的url路径和视图函数
url定义
views定义
def home(request):
return render(request,'home.html') //使用render函数来渲染html页面
接下来启动服务之后,就可以看到页面
html文件中使用变量
假如我们在html页面中一个量需要经常变动,因为我们可以把它定义为变量,这样方便我们随时使用,那我们怎么定义这个变量和和使用这个变量呢
我们先在templates文件中定义一个带有变量的index.html的文件
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>当前时间:{{ current_time }}</h1> //双引号中的current_time就是变量
</body>
</html>
接下来在urls.py和views.py文件中定义和引用
urls.py文件
views.py文件
def CurrentTime(request):
times = datetime.datetime.now()
return render(request,'index.html',{"current_time":times}) render函数接受多个参数,第三个参数是个字典,可以设置变量的值
接下来运行会发现,html页面显示的是真实的时间,而不是显示current_time字符串
多个APP里面url使用
我们写项目的时候是不会让一个文件干所有的事,我们必须把它切割开,分割成各个模块,函数的url也是如此,我们可以针对不同的App,根据App的功能定义不同的URL函数,创建一个叫做Music的App
python3 manager.py startapp Music
创建出来App叫Music的,目录下的文件,默认如下所示
Music
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-39.pyc
│ ├── urls.cpython-39.pyc
│ └── views.cpython-39.pyc
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
我们需要在Music里面创建一个urls.py的文件,用来定义Music的url函数,创建完成之后,如下
Music
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-39.pyc
│ ├── urls.cpython-39.pyc
│ └── views.cpython-39.pyc
├── admin.py
├── apps.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
├── urls.py //自行创建出来的urls.py文件
└── views.py
接下来要开始定义写这个路由函数,写的方法还是和上面的一样,但是要主要导入的模块
然后继续开始在Music里面views.py中创建我们这个listen函数
我们现在创建完成了子路由,但是我们默认的url是在项目HelloDjango中的urls.py,那我们就需要在项目的urls,py中include包含记录这个子路由
接下来就可以使用 http://127.0.0.1:8000/music/listen 来访问这个页面了
注意我们需要在模块配置中导入相关模块(不导入,也不会报错,亲测):
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'App',
'Music',
]
至于html页面就不再演示,方法和上面的一致