/ / Django. Metodo non associato in urls - python, django

Django. Metodo non associato in urls - python, django

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 № 1

La 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.