Опитвам се да приемам 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 адресите.