我刚刚在这里找到的答案得到了帮助: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'未定义
答案 0 :(得分:1)
与Python中的任何其他内容一样,您引用的任何变量都必须已存在于当前上下文中。
最初,Django视图只是将request
变量作为第一个参数的函数。据推测,如果您正在编写旧式视图,那么无论您定义为第一个变量(例如def view_name(request, ...)
),都将提供请求。
如果您正在使用基于类的视图,那么您的视图就是成员函数,因此按照惯例,它们的第一个参数将是self
,例如def view_name(self, request, ...)
。在这种情况下,请参阅Django文档,了解哪些参数根据您的子类化视图提供给哪些函数。