python django框架的路由传参,重定向,登陆,前后端不分离开发传参,过滤器,模板标签,继承,自定义过滤器和标签

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',
               &#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值