Python 在/create#u播放列表/局部变量处取消绑定LocalError';播放列表';分配前参考

Python 在/create#u播放列表/局部变量处取消绑定LocalError';播放列表';分配前参考,python,html,django,forms,exception,Python,Html,Django,Forms,Exception,以下是我的视图.py: def create_playlist(request): form = PlaylistForm(request.POST or None) if form.is_valid(): playlist = form.save(commit=False) playlist.name = request.name context={ 'playlist':playlist,

以下是我的视图.py:

def create_playlist(request):
    form = PlaylistForm(request.POST or None)
    if form.is_valid():
        playlist = form.save(commit=False)
        playlist.name = request.name
        context={
            'playlist':playlist,
            'name':playlist_name,
        }

        return render(request, 'create_playlist.html', context)
    playlist.save()

    context = {
            "form": form,
        }
    return render(request, 'create_playlist.html', {'form': form,})
我有一个
Playlist
forms.py
模型,其中包含播放列表模型的所有字段。我希望用户能够创建自己的播放列表,我为此制作了此列表,但在编译时,它会出现以下错误:

UnboundLocalError at /create_playlist/
local variable 'playlist' referenced before assignment
Request Method: GET
Request URL:    http://localhost:8000/create_playlist/
Django Version: 1.9.6
Exception Type: UnboundLocalError
Exception Value:    
local variable 'playlist' referenced before assignment
编辑:WSGIRequest对象没有属性“name”

这是我的模特

class Playlist(models.Model):
    name = models.CharField(max_length=200, null=False, blank=False,default='')
    songs = models.ManyToManyField('Song')
    def __str__(self):
        return self.name
这是我的forms.py:

class PlaylistForm(forms.ModelForm):
    class Meta:
        model=Playlist
        fields = ['name', 'songs' ]

您得到的错误是因为以下行。它在
if表单之外。是否有效():
块:

playlist.save()
我想您希望将它放在
if
块中,然后使用
render
返回响应:

if form.is_valid():
    playlist = form.save(commit=False)
    playlist.name = request.name
    playlist.save()
    context={
        'playlist':playlist,
        'name':playlist_name,
    }

    return render(request, 'create_playlist.html', context)

另外,请注意,
request.name
不是已知的语法

如果表单无效,则不会定义播放列表

这样做:

def create_playlist(request):
    form = PlaylistForm(request.POST or None)
    if form.is_valid():
        playlist = form.save(commit=False)
        playlist.name = request.name
        playlist.save()
        context={
            'playlist':playlist,
            'name':playlist_name,
        }
        return render(request, 'create_playlist.html', context)
    context = {
        "form": form,
    }
    return render(request, 'create_playlist.html', {'form': form,})

playlist
范围内定义,而您也在范围外使用它。如果
语句不满足,则可能会发生此错误。当我单击提交时,它返回:“WSGIRequest”对象没有属性“name”。谢谢,伙计,它工作了。但是当我单击提交时,它返回:“WSGIRequest”对象没有属性“name”,您如何将此
name
传递给视图?您添加的是表单和模型。它仍然没有告诉我们,当您已经在使用表单时,为什么要使用
request.name
。那么,我如何才能获得用户刚刚创建的播放列表名称呢?您必须已经在表单本身中获得了。如果您阅读django文档并在那里练习示例,那将是最好的。这将是一个很好的学习练习。