在Django请求v self.request

时间:2016-02-23 13:29:34

标签: django django-class-based-views

我刚刚在这里找到的答案得到了帮助:global name 'request' is not defined: overriding form_valid但是这让我想到了另一个问题:

什么时候只使用请求,什么时候使用self.request?为什么?我在文档https://docs.djangoproject.com/en/1.9/topics/class-based-views/generic-display/#dynamic-filtering中看到的示例并未在示例中使用request或self.request。现在也许这是因为它是一个基于类的视图,但我不认为我只是单独使用cbv v generic v functional的语法和用法。

更新

我的代码

from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from essell.models import Code

class CodeListView(ListView):
model = Code
template_name='statute.html'

def get_context_data(self, **kwargs):
    context = super(CodeListView, self).get_context_data(**kwargs)
    return context
来自文档的

from django.views.generic.list import ListView
from django.utils import timezone

from articles.models import Article

class ArticleListView(ListView):

model = Article

def get_context_data(self, **kwargs):
    context = super(ArticleListView, self).get_context_data(**kwargs)
    context['now'] = timezone.now()
    return context

我目前的错误

/ us / const

中的TypeError

无法将字典更新序列元素#0转换为序列

class CodeListView(ListView):
    model = Code
    template_name='statute.html'

    def get_context_data(self, **kwargs):
    #context = super(CodeListView, self).get_context_data(**kwargs)
    context = {'object_list':object_list}
    return context

/ us / const

中的NameError

全球名称' object_list'未定义

来自文档:https://docs.djangoproject.com/es/1.9/topics/class-based-views/generic-display/ "此模板将针对包含名为object_list的变量的上下文呈现,该变量包含所有发布者对象。一个非常简单的模板可能如下所示:"

class CodeListView(ListView):
model = Code
template_name='statute.html'

def get_context_data(self, **kwargs):
context = super(CodeListView, self).get_context_data(**kwargs)
context = {'object_list':object_list}
return context

全球名称' object_list'未定义

1 个答案:

答案 0 :(得分:1)

与Python中的任何其他内容一样,您引用的任何变量都必须已存在于当前上下文中。

最初,Django视图只是将request变量作为第一个参数的函数。据推测,如果您正在编写旧式视图,那么无论您定义为第一个变量(例如def view_name(request, ...)),都将提供请求。

如果您正在使用基于类的视图,那么您的视图就是成员函数,因此按照惯例,它们的第一个参数将是self,例如def view_name(self, request, ...)。在这种情况下,请参阅Django文档,了解哪些参数根据您的子类化视图提供给哪些函数。