簡體   English   中英

“賦值前引用的局部變量”Django 錯誤

[英]"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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM