目录
承接了我上一篇文章:Django运用以及创建一个web项目(全)
视图的基本使用
概述:在djano中,视图对web请求进行回应
视图就是一个python函数,在views.py文件中定义
定义视图:
from django.http import HttpResponse
def index(request):
return HttpResponse("what happen next time???")
配置url
在myApp应用目录下创建一个urls.py文件
修改project目录下的urls.py文件
对urlpatterns进行修改
from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
urlpatterns = [
path(r'^admin/', admin.site.urls),
path('',include('myApp.urls'))
]
对myApp下的urls.py输入以下代码
from . import views
from django.urls import path
urlpatterns = [
path('', views.index)
]
现在刷新页面http://127.0.0.1:8000/
想要页面url输入数字,在界面中显示出来
在view.py中写方法detail
def detail(request,num):
return HttpResponse("detail —— %s " % num)
在urls.py中写入
from . import views
from django.contrib import admin
from django.urls import path,re_path
urlpatterns = [
path('admin/',admin.site.urls),
path('', views.index),
re_path(r'^(\d+)/$',views.detail)
]
现在在页面url地址中输入,然后界面显示
也可以修改成
detail方法
def detail(request,num,num2):
return HttpResponse("detail —— %s ——%s" % (num,num2))
运行结果:
模板的基本使用
模板是HTML页面,可以根据视图中传递过来的数据进行填充
创建一个模板文件夹
创建myapp的模板目录
配置模板路径
修改settings.py文件中的TEMPLATES,将模板目录的地址给它
在settings.py中有一个BASE_DIR,相当于project的目录
在settings.py文件中的TEMPLATES的DIRS中添加模板位置
TEMPLATES = [
{
'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',
],
},
},
]
定义一个模板
在templates文件夹的myApp模板目录下创建一个HTML文件,这是班级的模板,命名为grades。再创建一个students.html
模板语法:
-
{
{输出值,可以是变量,也可以是对象.属性}}
-
{%执行代码段%}
grades.html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>班级信息</title>
</head>
<body>
<h1>班级信息列表</h1>
<ul>
{% for grade in grades %}
<li>
<a href="#"> {{grade.gname}} </a>
</li>
{%endfor%}
</ul>
</body>
</html>
myApp中的urls.py代码,让使用grades/作结尾时显示grades.html
urlpatterns = [
path('admin/',admin.site.urls),
path('', views.index),
re_path(r'^(\d+)/(\d+)/$',views.detail),
re_path(r'^grades/$',views.grades)
]
view.py中的新增方法。
from .models import Grades
def grades(request):
#去模板里取数据
gradesList = Grades.objects.all()
#将数据传递给模板,模板再渲染页面,将渲染好的页面返回给浏览器
return render(request,'myApp/grades.html',{'grades':gradesList})
运行效果:
显示学生的信息也是一样的方法
students.html代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学生信息</title>
</head>
<body>
<h1>学生信息列表</h1>
<ul>
{% for student in students %}
<li>
{{student.sname}} —— {{student.scontent}}
</li>
{%endfor%}
</ul>
</body>
</html>
view.py新方法
from .models import students
def student(request):
studentList = students.objects.all()
return render(request,'myApp/students.html',{'students':studentList})
urls.py代码:
urlpatterns = [
path('', views.index),
re_path(r'^(\d+)/(\d+)/$',views.detail),
re_path(r'^grades/$',views.grades),
re_path(r'^students/$',views.student)
]
运行效果:
点击班级信息,显示对应班级的学生信息列表
再views.py中新增一个方法
def grade_student(request,num):
grade = Grades.objects.get(pk=num)
studentsList = grade.students_set.all()
return render(request, 'myApp/students.html', {'students': studentsList})
再urls.py中修改
from . import views
from django.urls import path,re_path
from django.contrib import admin
urlpatterns = [
path('admin/',admin.site.urls),
path('', views.index),
re_path(r'^(\d+)/(\d+)/$',views.detail),
re_path(r'^grades/$',views.grades),
re_path(r'^students/$',views.student),
re_path(r'^grades/(\d+)$',views.grade_student)
]
模板的HTML不需要改变
运行效果:
一起学习,一起进步 -.- ,如有错误,可以发评论