2015-06-19 40 views
-1

我試圖接受本地主機:8000 /上傳文件,並運行到這個問題Django。在URL中不受約束的方法

不受約束的方法upload_file()必須上傳實例作爲第一個參數來調用(得而不是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') 

回答

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') 

您需要繼承形式,這些視圖類中的一個,否則Django會對待你的觀點作爲一個普通的類這就是爲什麼您獲得的錯誤。

你還需要調整你的urls.py:

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

翻翻文檔,並在你的VIE結構,我不知道你是正確的構建你的觀點基於類的意見後。您可能需要更多地閱讀文檔並相應地調整您的結構。

,我相信你會想somethign,看起來更像是這樣的:

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

我改變視圖類,它stil不工作 – Mikhail

+0

「沒有工作」是什麼意思? – IanAuld

0

我不明白爲什麼你有文件上傳類的。 Python不是Java,不需要將所有內容都放入類中。在模塊級別放置upload_filethanks,並直接在url模式中引用它們。