1 路由传参
在主urls中传递参数,注意格式
from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
urlpatterns = [
path('admin/', admin.site.urls),
path('one/', include('one.urls')),
path('two/', include('two.urls'), {
'time': True}),
path('three/', include('three.urls'))
]
此处我们给名为two的app传入一个name的字典,然后我们到名为two的app下定义函数
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
from django.template.loader import get_template
import time
# Create your views here.
def test(request,**kwargs):
return redirect(reverse('test1'))# 根据named动态获取路由
message = 'hello world!'
if kwargs.get('time'):
message += '<br/>' + time.asctime(time.localtime(time.time()))
return HttpResponse(message)
def test1(request,**kwargs):
message = 'hello world! test1'
if kwargs.get('time'):
message += '<br/>' + time.asctime(time.localtime(time.time()))
return HttpResponse(message)
这里我们使用**kwargs接收传过来的参数,然后在函数中使用kwargs.get()方法接收,然后在里面传入键,就会得到值。这样就完成了路由方式的传参。
2重定向
from django.urls import path
from . import views
urlpatterns = [
path(r'test/', views.test),
path(r'test1/', views.test1,name='test1'),
path(r'index/<username>/<password>',views.index)
]
我们直接在路由中给重定向的函数中传入第三个参数,即给他定义一个名字
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
from django.template.loader import get_template
import time
# Create your views here.
def test(request,**kwargs):
return redirect(reverse('test1'))# 根据named动态获取路由
message = 'hello world!'
if kwargs.get('time'):
message += '<br/>' + time.asctime(time.localtime(time.time()))
return HttpResponse(message)
def test1(request,**kwargs):
message = 'hello world! test1'
if kwargs.get('time'):
message += '<br/>' + time.asctime(time.localtime(time.time()))
return HttpResponse(message)
这里我们又引入一个方法 reverse,然后直接需要在重定向的函数中,直接ruturn redirect(reverse(‘test1’)).该方法会根据路由中的name动态的获取重定向的路由。
3前后端不分离开发
前后端不分离开发,即把前端代码和前后端交互,以及数据库交互放在一起,那么我们就需要注册一个templates文件,来存放前端html文件夹。首先在settings里面找到
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',
],
},
},
]
我们将template路径放在’DIRS’中,注意格式!
然后在项目文件夹下新建一个templates文件夹,然后创建与app数量相同且与app名称相同的文件夹(主要是为了方便管理)。
然后在同名文件夹中新建模板文件(html文件):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div>欢迎登陆:<span style="color: red">{
{
username }}</span></div>
</body>
</html>
然后在views文件中:
def template_1(request,**kwargs):
username = 'zjj'
#render是一个函数,第一个参数传入请求对象request,第二个传入模板地址,第三个参数是传递给模板的一个字典,通过key取值(该参数可省略,即无参数传递时)
return render(request, 'two/template_1.html', {
'username': username})
这里我们使用的是render,而不是Httpresponse,这里的第二个参数用来引入模板html,然后第三个参数用来给模板文件传参,注意:这里使用的键值对格式的字典。
效果:
当然,这里不仅可以传字符串,还可以传很多值:
def fun():
return 'function'
class Student:
def __init__(self,name):
self.name = name
def study(self):
return 'good'
def template_var(request,**kwargs):
stu = Student('yige')
context = {
'str_var': 'string',
&#