簡體   English   中英

UnboundLocalError:在Django中賦值之前引用了局部變量“ form”

[英]UnboundLocalError: local variable 'form' referenced before assignment in Django

所以我正在開發一個Django項目,這是我的views.py文件:

def new_topic(request, pk):
    board = get_object_or_404(Board, pk=pk)
    user = User.objects.first()  # TODO: get the currently logged in user

    if request.method == 'POST':
        form = NewTopicForm(request.POST)
    if form.is_valid():
        topic = form.save()
        return redirect('board_topics', pk=board.pk)
    else:
        form = NewTopicForm()
    return render(request, 'new_topic.html', {'form': form})

運行服務器時,出現錯誤消息:

UnboundLocalError: local variable 'form' referenced before assignment

這是我的new_topic.html文件

{% extends 'base.html' %}

{% block title %}Start a New Topic{% endblock %}

{% block breadcrumb %}
    <li class="breadcrumb-item"><a href="{% url 'home' %}">Boards</a></li>
    <li class="breadcrumb-item"><a href="{% url 'board_topics' board.pk %}">{{ board.name }}</a></li>
    <li class="breadcrumb-item active">New topic</li>
{% endblock %}

{% block content %}
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn btn-success">Post</button>
    </form>
{% endblock %}

if form.is_valid(): GET請求上失敗,因為您僅在request.method == 'POST'時定義form

可以通過更改一些縮進來解決此問題:

if request.method == 'POST':
    form = NewTopicForm(request.POST)
    if form.is_valid():
        topic = form.save()
        return redirect('board_topics', pk=board.pk)
else:
    form = NewTopicForm()
return render(request, 'new_topic.html', {'form': form})

我沒有發現縮進的任何問題,但初始化。 請在渲染之前進行初始化! 進行如下所示的更改肯定可以解決問題,這是擺脫更改的一種非常真實,正確的方法:

def new_topic(request, pk):
    board = get_object_or_404(Board, pk=pk)
    user = User.objects.first()  # TODO: get the currently logged in user
    form = NewTopicForm()
    if request.method == 'POST':
        form = NewTopicForm(request.POST)
        if form.is_valid():
           topic = form.save()
           return redirect('board_topics', pk=board.pk)
        else:
            form = NewTopicForm()
    return render(request, 'new_topic.html', {'form': form})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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