Django创建一个项目并且进行视图和模型的配置

145 阅读1分钟

目录

视图的基本使用

定义视图:

配置url

模板的基本使用


承接了我上一篇文章: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不需要改变

运行效果:

 

 

 

一起学习,一起进步 -.- ,如有错误,可以发评论