/ / Джанго. Несвързан метод в urls - python, django

Джанго. Несвързан метод в urls - python, django

Опитвам се да приемам localhost: 8000 / upload файл и се сблъскайте с този проблем

несвързан метод upload_file () трябва да бъде извикан с качването на потребителския модел като първи аргумент (вместо това има WSGIRequest instance)

urls.py

from django.conf.urls import include, url
from django.contrib import admin

from upload.views import Upload


urlpatterns = [
url(r"^admin/", include(admin.site.urls)),
url(r"^upload/$", Upload.upload_file),
url(r"^thanks/$", Upload.thanks),
]

views.py

from django.http import HttpResponse
from django.template import RequestContext

from django.shortcuts import render_to_response
from upload.forms import FileForm

from upload.models import upFile

class Upload():

def upload_file(request):
if request.method == "POST":
form = FileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect("thanks")
else:
form = FileForm()

return render_to_response("temp1.html", {"form": form}, context_instance = RequestContext(request))

def thanks(request):
return render_to_response("temp2.html")

Отговори:

1 за отговор № 1

Вашият изглед не се наследява от гледна точка на клас Django: https://docs.djangoproject.com/en/1.8/topics/class-based-views/intro/

from django.views.generic import View


class Upload(View):
def upload_file(self, request):
if request.method == "POST":
form = FileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect("thanks")
else:
form = FileForm()

return render_to_response("temp1.html", {"form": form}, context_instance = RequestContext(request))

def thanks(self, request):
return render_to_response("temp2.html")

Трябва да наследявате един от тези класове, в противен случай Джанго ще третира възгледа ви като нормален клас, поради което получавате тази грешка.

трябва също така да настроите URL адреса на urls.py:

urlpatterns = [
url(r"^upload/", Upload.as_view()),
]

След като се вгледа в документите и вструктура на вашия живот Не съм сигурен, че сте структуриране на вашите виждания правилно за клас въз основа на views.You може да искате да прочетете в docs някои още и да коригирате вашата структура съответно.

Вярвам, че ще искате нещо, което изглежда по-скоро така:

class Upload(View):
def get(self, request):
form = FileForm()
return render_to_response("temp1.html", {"form": form}, context_instance = RequestContext(request))

def post(self, request):
form = FileForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect("thanks")
else:
return render_to_response("temp2.html")

0 за отговор № 2

Не разбирам защо имате класа "Качване" изобщо. Питон не е Java, няма нужда да поставяте всичко в класове. Слагам upload_file и thanks на ниво модул и се отнасят директно към тях в URL адресите.