2017-12-30 5 views
1

So arbeite ich an einem Django-Projekt und das ist meine views.py Datei:UnboundLocalError: lokale Variable 'Form' vor der Zuweisung referenziert in Django

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}) 

Als ich meinen Server lief, ich einen Fehler habe zu sagen:

UnboundLocalError: local variable 'form' referenced before assignment

Das ist mein new_topic.html Datei

{% 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 %} 
+0

anzumerken, dass Django einen Verweis auf diese Zeile aus:

Dies kann durch die Änderung einiger Einbuchtung befestigt werden, wenn form.is_valid(): –

Antwort

2

Die Zeile if form.is_valid(): schlägt auf eine GET Anfrage fehl, weil Sie nur form definieren, wenn request.method == 'POST'.

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}) 
Verwandte Themen