[英]"Local variable referenced before assignment" Django error
我不知道是什么導致了這個問題。 我所做的唯一更改是將 loginquiredmixins 添加到基於類的視圖中。
一旦我開始對登錄頁面進行樣式化,我似乎已經破壞了一些東西,但我不知道究竟是什么,這是一個奇怪的想法,CSS 或一些 HTML 會導致什么問題,對吧?
我嘗試在if
語句之前分配變量並將其設置為null
但這似乎無法正常工作,因為它無論如何都會引發錯誤。 我正在使用基本的 django 身份驗證系統。
我得到的確切錯誤是 - 分配前引用的“局部變量“課程”。
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/login
Django Version: 3.0.7
Python Version: 3.7.3
Installed Applications:
['mainpage.apps.MainpageConfig',
'quiz.apps.QuizConfig',
'courses.apps.CoursesConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\contrib\auth\mixins.py", line 52, in dispatch
return super().dispatch(request, *args, **kwargs)
File "C:\Users\m\AppData\Local\Continuum\anaconda33\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "H:\Learning Development Platform\learningplatform\courses\views.py", line 26, in get
lesson_qs = course.lesson.filter(slug=lesson_slug)
Exception Type: AttributeError at /accounts/login
Exception Value: 'NoneType' object has no attribute 'lesson'
這是我的 models.py 文件:
from django.contrib.auth import decorators
from django.db import models
from django.db.models.fields import SlugField
from django.urls import reverse
class Course(models.Model):
slug = models.SlugField()
title = models.CharField(max_length=120)
description = models.TextField()
def __str__(self) -> str:
return self.title
def get_absolute_url(self):
return reverse('courses:detail', kwargs={'slug': self.slug})
@property
def lessons(self):
return self.lesson_set.all().order_by('position') # syntax for foreignkey object
class Lesson(models.Model):
slug = models.SlugField()
title = models.CharField(max_length=120)
course = models.ForeignKey(Course, on_delete=models.SET_NULL, null=True)
position = models.IntegerField()
video_url = models.CharField(max_length=200)
def __str__(self) -> str:
return self.title
def get_absolute_url(self):
return reverse(
'courses:lesson-detail',
kwargs={
'course_slug': self.course.slug,
'lesson_slug': self.slug
}
)
還有我的views.py:
from django.shortcuts import render
from django.views.generic import ListView, DetailView, View
from .models import Course, Lesson
from django.contrib.auth.mixins import LoginRequiredMixin
class CourseListView(ListView):
model = Course
class CourseDetailView(DetailView):
model = Course
class LessonDetailView(LoginRequiredMixin, View):
def get(self, request, course_slug, lesson_slug, *args, **kwargs):
course_qs = Course.objects.filter(slug=course_slug)
if course_qs.exists():
course = course_qs.first()
lesson_qs = course.lesson.filter(slug=lesson_slug)
if lesson_qs.exists():
lesson = lesson_qs.first()
context = {
'object': lesson
}
return render(request, 'courses/lesson_detail.html', context)
我明白多少...
在您的“LessonDetailView”中 Class => 在“get”方法中
改變這個
lesson_qs = course.lesson.filter(slug=lesson_slug)
至
lesson_qs = course.objects.filter(slug=lesson_slug)
然后這個錯誤將得到解決:
異常類型:/accounts/login 處的 AttributeError
異常值:“NoneType”object 沒有屬性“課程”
好像我已經修好了。
出於某種原因,添加負責 login_url 的整個 url 解決了該問題。 login_redirect 無法正常工作,因為它正在重定向導致問題的視圖。
謝謝你的幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.