Форма не появляется - UnboundLocalError at / ФОРМА ДЖАНГО

моя форма не отображается на моем сайте и теперь она ошибочна. вот мое сообщение об ошибке :

UnboundLocalError at / local variable 'form' referenced before Назначение Метод запроса: GET URL запроса: http://localhost:8000/ Django Версия: 3.0.14 Тип исключения: UnboundLocalError Исключение Значение: локальная переменная 'form' ссылается перед присвоением Исключение Местоположение: F:\KULIAH\SEMESTER8\SKRIPSI\MusicLockApp\MusicLockApp\views.py в домашней странице, строка 20 Python Executable: C:\Users\Capoo\python.exe Версия Python: 3.10.2 Python Path: ['F:\KULIAH\SEMESTER8\SKRIPSI\MusicLockApp', 'C:\Users\Capoo\python310.zip', 'C:\Users\Capoo\DLLs', 'C:\Users\Capoo\lib', 'C:\Users\Capoo', 'C:\Users\Capoo\lib\site-packages'] Время сервера: Thu, 19 May 2022 06:33:52 +0000

error

вот мой views.py :

def homepage(request):
    if request.method == "POST":
        form = Audio_store(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['record'])
            return render(request, "homepage.html", {'form': form})
    else:
        return render(request, "homepage.html", {'form': form})
    return render(request, "homepage.html")

html :

<form method="POST" enctype="multipart/form-data">
                            <button type="submit" class="dsnupload">
                                <i class="large material-icons" style="font-size: 50pt; margin-top: 10px;">audiotrack</i>
                                <p style="font-weight: bold; color: white;">Insert file audio (mp3)</p>
                                {% csrf_token %}
                                {{form}}
                            </button>
                          </form>

form.py :

from django import forms

class Audio_store(forms.Form):
    record=forms.FileField(widget=forms.FileInput(attrs={'style': 'width: 300px;', 'class': 'form-control'}))

urls.py :

urlpatterns = [
     url(r'^admin/', admin.site.urls),
     url(r'^decode/$', views.decode),
     path("", views.homepage, name="upload")
 ]

if settings.DEBUG: #add this
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Я хочу, чтобы моя форма появлялась мгновенно, пожалуйста, помогите мне

попробуйте это

def homepage(request):
    if request.method == "POST":
        form = Audio_store(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['record'])
            return render(request, "homepage.html", {'form': form})
    else:
        return render(request, "homepage.html", {'form': Audio_store()})
    return render(request, "homepage.html")

пример https://docs.djangoproject.com/en/4.0/topics/forms/#the-view

вот так, и форма появится мгновенно.

   def homepage(request):
        form_class = Audio_store
        form = form_class(request.POST or None)
        if request.method == "POST":
            form = Audio_store(request.POST, request.FILES)
            if form.is_valid():
                handle_uploaded_file(request.FILES['record'])
                return render(request, "homepage.html", {'form': form})
        return render(request, "homepage.html", {'form': form})

Когда вы нажимаете на URL, выполняется GET-запрос. Согласно вашему коду, когда запрос переходит к части else, где запрос должен показать пустую форму, но вы не определили объект класса формы и не передали этот объект как контекст в операторе return, поэтому вы получаете эту ошибку.

Попробуйте этот код:

def homepage(request):
    form = Audio_store()
    if request.method == "POST":
        form = Audio_store(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['record'])
            form.save()
            return render(request, "homepage.html", {'form': form})
    return render(request, "homepage.html", {'form': form})

Надеемся, что это сработает для вас.

Вернуться на верх