首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django CBV -获取要在类中使用的url变量,错误:未定义自身

在Django中,CBV(Class-Based Views)是一种用于处理请求和生成响应的视图方法。当使用CBV时,有时需要在类中使用URL变量。然而,在使用URL变量时,可能会遇到错误"未定义自身"。

这个错误通常是由于在类中使用URL变量时,没有正确定义自身的原因导致的。为了解决这个错误,可以采取以下步骤:

  1. 确保在类中正确定义自身。在类中使用URL变量时,需要使用self关键字来引用自身。例如,如果要在类中使用名为my_variable的URL变量,可以使用self.my_variable来引用它。
  2. 确保在URL配置中正确传递变量。在URL配置中,如果要将变量传递给CBV,需要使用尖括号<>来定义变量,并在URL模式中指定变量的名称。例如,如果要传递名为my_variable的变量,可以使用<my_variable>来定义它,并在URL模式中指定变量的名称。
  3. 确保在URL模式中正确捕获变量。在URL模式中,需要使用正则表达式来捕获变量的值,并将其传递给CBV。例如,如果要捕获名为my_variable的变量,并将其传递给名为MyView的CBV,可以使用(?P<my_variable>\w+)来捕获变量,并在URL模式中指定CBV的名称。

以下是一个示例,演示了如何在Django CBV中获取并使用URL变量:

代码语言:txt
复制
# urls.py
from django.urls import path
from .views import MyView

urlpatterns = [
    path('my_view/<my_variable>/', MyView.as_view(), name='my_view'),
]

# views.py
from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        my_variable = self.kwargs.get('my_variable')  # 获取URL变量
        # 使用URL变量进行处理
        # ...

        return HttpResponse('Response')

在上面的示例中,我们定义了一个名为my_view的URL模式,其中包含一个名为my_variable的变量。然后,我们创建了一个名为MyView的CBV,并在get方法中使用self.kwargs.get('my_variable')来获取URL变量的值。

这样,我们就可以在Django CBV中正确地获取和使用URL变量了。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云对象存储(COS)。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django ListView使用 ListView获取url参数值方式

Colortag_view(ListView): #context_object_name = '如果不指定的话在html页面 可以使用object_list获取' context_object_name...url 值 比如https://static.zalou.cn/admin/colortags/?...第二种情况,只按照关键字查询: 和分类查询类似,将文本输入标签(例如text类型input)绑定事件,获取到输入值,将获取值作为地址?后参入传递到后端。...第三种情况,同时按照分类和关键字进行查询: 此时我们需要在地址?后传递两个参数,一个是分类一个是关键字,然后在后端接收参数并进行筛选 <!...ListView使用 ListView获取url参数值方式就是小编分享给大家全部内容了,希望能给大家一个参考。

3.9K20

Cookie、Session登陆验证相关介绍和用法

Seesion配置 Django默认支持Session,其内部提供了5种类型Session供开发者使用。...如果要在应用程序中使用Session,需要在settings.pyMIDDLEWARE_CLASSES变量中加入’django.contrib.sessions.middleware.SessionMiddleware.../') return render(request, 'login.html') 要在CBV视图中使用我们上面的check_login装饰器,有以下三种方式: from django.utils.decorators...return redirect("/index/") 另外: Session其实就是会话变量保存地,只要是能使用变量地方,都能使用 Sesion 变量。...要真正知道访怎么用它,需要理解两点: 1、Session 变量是存在服务器内存,应尽量少用,否则服务器会累着 2、Session 就是变量泛型集合,所有使用变量地方理论上都可以使用 Session

2.7K71

CSRF 跨站请求伪造

解析: 首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里 value 属性值是一个随机字符串,用户获取到登录页面的同时也获取到了这个隐藏input...Django 处理CSRF csrf是针对与post请求才会做验证 几种处理方式 csrf_token 用于form表单,作用是跨站请求伪造保护。...这里使用装饰器就可以解决~ 两个装饰器可用: csrf_protect: 需要验证 csrf_exempt:不需要验证 装饰器使用方法按照FBV或者CBV装饰器使用方法即可 导入:from django.views.decorators.csrf...装饰器示例,CBV装饰器有三种用法分别局部验证都可以使用 # 方式一,加在方法上验证,可以使用 '''局部验证,全局csrf禁用''' from django.utils.decorators import...) def post(self,request): return HttpResponse('post') # 方式二,加在上验证,可以使用 from django.utils.decorators

1.1K20

python测试开发django-73.django视图 CBV 和 FBV

前言 FBV(function base views) 就是在视图里使用函数处理请求,这一般是学django入门时候开始使用方式。...CBV(class base views) 就是在视图里使用处理请求,这是面向对象编程方式。...import url urlpatterns = [ url(r'^fbvdemo/$', views.fbvdemo) ] CBV 模式 CBV(class base views) 就是在视图里使用处理请求...自定义必须继承 View 父 提高了代码复用性,可以使用面向对象技术,比如 Mixin(多继承) 可以用不同函数针对不同 HTTP 方法处理,而不是通过很多if判断,提高代码可读性 CBV...模式继承View提供了多种请求方式对应响应函数不需要在进行判断,可以直接在子类重写继承方法 CBV 模式子类继承重写父请求方式响应函数通过父 dispatch 方法进行反射分发 在 urls.py

51210

Django请求生命周期

),即一个url对应一个 例子:使用cbv模式来请求网页 路由信息: urlpatterns = [ url(r'^fbv/',views.fbv), url(r'^cbv/',views.CBV.as_view...而如果使用cbv模式,在url匹配成功之后,会找到视图函数对应,然后这个回到请求头中找到对应Request Method....如果是客户端以post方式提交请求,就执行post方法; 如果是客户端以get方式提交请求,就执行get方法 然后查找用户发过来url,然后在执行对应方法查询生成用户需要数据....2.1 fbv方式请求过程 用户发送url请求,Django会依次遍历路由映射表所有记录,一旦路由映射表其中一条匹配成功了, 就执行视图函数对应函数名,这是fbv执行流程 2.2 cbv...方式请求过程 当服务端使用cbv模式时候,用户发给服务端请求包含url和method,这两个信息都是字符串类型 服务端通过路由映射表匹配成功后会自动去找dispatch方法,然后Django会通过

2.7K100

视图 vs. 函数视图

在阅读本篇之前,请记住一点「基于视图不会替代基于函数视图」. 介绍 无论是视图还是基于函数视图, 最终绑定到 URL Conf 都是函数. 为什么这么说?...函数绑定到 URL 上面很显式证明了绑定是函数, 这一点毋庸置疑。 但是怎么被绑定成为函数, 我们可以看下as_view方法....如上面代码所示, 当我们把视图绑定到 url conf 时使用 as_view 挂载其实返回是一个函数....#2 观点 「仅使用django.views.generic.View, 不用GV」 此观点认为, View 就足够了, 并且 View 是真正CBV, 而通用视图则不是真正 CBV....并且在你需要地方使用 CBV。一般在哪里需要用到 CBV? 任务需要在多个视图中重用代码地方, 这个场景下 CBV 是最好选择。

2.4K10

03.Django基础三之视图函数

注意:使用CBV时,urls.py也做对应修改:: # urls.py from django.conf.urls import url from myapp.views import MyView...中指定属性:     在url设置属性Python urlpatterns = [ url(r'^index/$', GreetingView.as_view(name="egon"))..., #里面必须有name属性,并且会被传进来这个属性值给覆盖掉 ] 三 使用Mixin(了解)   我觉得要理解djangoclass-based-view(以下简称cbv),首先要明白django...CBV     方法与独立函数不完全相同,因此不能直接将函数装饰器应用于方法 ,我们需要先将其转换为方法装饰器。     ...传递一个具体ORM对象(了解即可)       将调用具体ORM对象get_absolute_url() 方法来获取重定向URL: from django.shortcuts import redirect

4.9K30

WEB框架本质和第一个Django实例

,我们只要在HTML页面遵循jinja2语法规则写上,其内部就会按照指定语法进行相应替换,从而达到动态返回内容。...FBV模式和CBV模式 FBV 一个url对应一个视图函数,这个模式叫做FBV(Function Base Views) CBV CBV(Class Base views),即一个url对应一个 例子...而如果使用cbv模式,在url匹配成功之后,会找到视图函数对应,然后这个回到请求头中找到对应Request Method....如果是客户端以post方式提交请求,就执行post方法; 如果是客户端以get方式提交请求,就执行get方法 然后查找用户发过来url,然后在执行对应方法查询生成用户需要数据....当服务端使用cbv模式时候,用户发给服务端请求包含url和method,这两个信息都是字符串类型 服务端通过路由映射表匹配成功后会自动去找dispatch方法,然后Django会通过dispatch

1.6K40

DjangoURL(路由系统)用法

使请求到来之后,根据urls.py里关系条目,去查找到与请求对应处理方法,从而返回给客户 端http页面数据 路由系统格式 url(正则表达式,view视图函数/视图,参数) django 项目中...相当于给URL取了个全局变量名,你只需要修改这个全局变量值,在整个Django引用它地方也将 同样获得改变。这是极为古老、朴素和有用设计思想,而且这种思想无处不在。...是指url 和view对应关系 FBV function base view /url/ --> 函数 CBV class base view /url/ --> 上述都是FBV方式。...反相解析 在我们Django项目中,我们经常会遇到要在视图中返回一个重定向到具体URL响应,或者要将具体URL地址嵌入到HTML页面(如:a标签href属性等)情况。...就是用反向解析办法 应用范围 模板超链接 视图中重定向 使用方法 namespace和name属性 定义url时,需要为include定义namespace属性,为url定义name属性 使用

1.7K10

Django之视图层与模板层

,而是会将表单数据按照 k1=v1&k2=v2&k3=v3格式放到url,然后发送给djangodjango会将这些数据封装到request.GET,注意此 时request.body为空、无用...#part3 一.HttpRequest.path 获取url地址路径部分,只包含路径部分 二.HttpRequest.get_full_path() 获取url地址完整path,既包含路径又包含参数部分...base view)和CBV基于视图(Class base view) 1.4.1FBV 我们前面使用视图函数就是FBV。...:url(r'^login/',views.MyLogin.as_view()) 从路由书写可以看出这里执行方法,而方法本质还是函数所以CBV在路由匹配上本质还是FBV。... {% endfor %} 2.3.3with标签 with标签用来给一个复杂变量名起别名,如果变量值来自于数据库,在起别名后只需要使用别名即可,无需每次都向数据库发送请求重新获取变量值,

9.2K10

Django-restframework

启动项目时 昨天在调试django时,发现在 APIView 打的断点没有断下来,而是打在 View 断点断下来了,调试了很多次,最后发现,在 django 项目启动时,会首先加载 urls 文件...,执行 views as_view方法,其实是继承自 APIView ,APIView 继承自 django 原生 View as_view 方法。...目前还不清楚这里面的具体流程是什么,但是并不妨碍阅读之后源码,在这只要清楚一点,在 Django 项目启动时,路由所对应CBV里面的相关方法内存地址已经获取到。...在这里该 self 由于是 继承自APIViewBook对象,所以dispatch方法首先去自身找,之后去父找,在APIView中找到dispatch方法,源码如下: ?...在实例化Request对象时,authenticators参数需要在认证时使用,所以先把这个参数值找出来。步骤如下: 调用 self.get_authenticators ?

42920

DjangoRestFramework,restful规范、APIview、解析器组件、Postman等

一 预备知识   预备知识:djangoCBV和FBV     CBV(class based view):多用,简单回顾一下     FBV(function based view):   CBV模式简单操作...一般来说,数据库表都是同种记录"集合"(collection),所以API名词也应该使用复数。       ...zoo_id=ID 含义是相同。       常见情况是,资源需要多级分类,因此很容易写出多级 URL,比如获取某个作者某一文章。...,不用DRF来写个接口,看看效果   好,接下来我们创建一个django项目,models创建一个表,添加一些数据,然后写一个数据接口来获取一下这些数据,返回json数据类型,按照我们CBV模式来写...,这些变量是用来控制我们视图里面的各个组件 ?

2.5K20

Django学习笔记之CBV和FBV

FBV FBV(function base views) 就是在视图里使用函数处理请求。 在之前django学习,我们一直使用是这种方式,所以不再赘述。...CBV CBV(class base views) 就是在视图里使用处理请求。 Python是一个面向对象编程语言,如果只用函数来开发,有很多面向对象优点就错失了(继承、封装、多态)。...在url,就这么写: # urls.py from django.conf.urls import url from myapp.views import MyView urlpatterns...中指定属性: 在url设置属性Python urlpatterns = [ url(r'^index/$', GreetingView.as_view(name="egon")), ]...使用Mixin 我觉得要理解djangoclass-based-view(以下简称cbv),首先要明白django引入cbv目的是什么。

94010

Django』视图views

Django ,主要有两种类型视图: FBV:基于函数视图 CBV:基于视图 FBV(Function-Based Views)和CBV(Class-Based Views)是两种处理视图方式...它使用 Python 来组织和管理视图逻辑。在CBV,每个视图通常是一个方法,用于处理不同类型 HTTP 请求。CBV提供了更多灵活性和可扩展性,允许你在不同方法组织视图逻辑。...在 Django ,当你使用视图时,需要调用 as_view() 方法来将视图转换为可调用视图函数。...这是因为 Django URL 路由系统需要将视图映射到 URL 模式,而视图本身只是Python ,无法直接作为视图函数使用。...因此,需要使用 as_view() 方法将视图转换为可调用函数,以便在 URL 配置中使用

6610

Django-DRF | 请求

Django网络应用开发5项基础核心技术包括模型(Model)设计,URL 设计与配置,View(视图)编写,Template(模板)设计和Form(表单)使用。...默认输入url请求方式即为get,当请求方式为get时,若带有需要传递其他参数,则会将该参数name和value补充在url中一并提交,post方式则将数据放在内容中一并提交,不再url显示。...在浏览器发送request数据包header,可以看到这些内容,例如: 一、CBV 视图里使用处理请求,在url中一个路径对应一个。...# 执行后面的as_view()方法,是父里面的方法 ] 视图函数 from django.views import View from django.http import HttpResponse...定义需要继承 View url需要添加 as_view() 里面使用 from 表单提交,只有 get 和 post 方法 里面使用 ajax 发送数据,支持 restful 规范 'get

62220

Django请求生命周期

),即一个url对应一个 例子:使用cbv模式来请求网页 路由信息: urlpatterns = [ url(r'^fbv/',views.fbv), url(r'^cbv/',views.CBV.as_view...而如果使用cbv模式,在url匹配成功之后,会找到视图函数对应,然后这个回到请求头中找到对应Request Method....如果是客户端以post方式提交请求,就执行post方法; 如果是客户端以get方式提交请求,就执行get方法 然后查找用户发过来url,然后在执行对应方法查询生成用户需要数据....方式请求过程 当服务端使用cbv模式时候,用户发给服务端请求包含url和method,这两个信息都是字符串类型 服务端通过路由映射表匹配成功后会自动去找dispatch方法,然后Django会通过...从Django返回响应内容包含响应头和响应体 在Django,有的时候一个视图函数,执行完成后会使用HttpResponse来返回一个字符串给客户端.

52620
领券