Sto cercando di accettare localhost: 8000 / caricare il file ed eseguire questo problema
il metodo non associato upload_file () deve essere chiamato con Upload instance come primo argomento (invece l'istanza di WSGIRequest)
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")
risposte:
1 per risposta № 1La tua vista non eredita da una vista basata sulla classe 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")
Devi ereditare la forma di una di queste classi vista altrimenti Django considererà la tua vista come una classe normale ed è per questo che ricevi questo errore.
devi anche regolare la tua urls.py:
urlpatterns = [
url(r"^upload/", Upload.as_view()),
]
Dopo aver esaminato i documenti e alstruttura della tua vie Non sono sicuro che tu stia strutturando correttamente le tue visualizzazioni per le viste basate sulla classe. Potresti voler leggere di più i documenti e adeguare la tua struttura di conseguenza.
Credo che vorrà qualcosa che assomigli più a questo:
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 per risposta № 2
Non capisco perché tu abbia la classe Upload. Python non è Java, non c'è bisogno di mettere tutto nelle classi. Mettere upload_file
e thanks
a livello di modulo, e fare riferimento a loro direttamente nei modelli di URL.