2013-04-14 94 views
0

我需要一些幫助來理解如何從我的django網站下載文件到用戶機器。我已經創建了一個上傳文件的基本方法。這些文件然後是一個類的實例,並保存在我的「媒體」文件夾中。我需要幫助的是如何提供文件。我希望用戶能夠訪問一個頁面並點擊他們想下載的文件。出於某種原因,我找不到任何資源如何做到這一點。這裏是我的文件,在這一點上在Django中下載文件

urls.py

url(r'^admin/', include(admin.site.urls)), 
    url(r'^upload/', views.upload), 
    url(r'^download/', views.download), 
    url(r'^success/', views.success), 
) 

if settings.DEBUG: 
    urlpatterns = patterns('', 
          url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), 
          ) + urlpatterns 

models.py

class WorkSheet(models.Model): 
    worksheet_name = models.CharField(max_length= 150, default = '') 
    creator = models.ForeignKey(User, default = True) 
    worksheet_file = models.FileField(upload_to = 'worksheets', default = True) 
    number_of_stars = models.PositiveIntegerField(default = 0) 
    category = models.CharField(max_length = 100, default = '') 


class UploadWorkSheetForm(ModelForm): 
    class Meta: 
     model = WorkSheet 
     exclude = ('number_of_stars', 
        'creator',) 

views.py

def upload(request): 
    if request.method == 'POST': 
     form = UploadWorkSheetForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      return http.HttpResponseRedirect('/success/') 
    else: 
     form = UploadWorkSheetForm() 
    return render(request, 'upload.html', {'form': form}) 
def download(request): 
    return render_to_response('download.html') 
def success(request): 
    return render_to_response('upload_success.html') 

所以基本上我想要用戶訪問www.mysite.com/download並能夠下載文件。謝謝!!

。 。 。 。 。 。 。 。 。

另外,這是一個問題,我的上傳文件視圖沒有這樣的處理程序?

def handle_uploaded_file(file,path=''): 
    filename = file._get_name() 
    destination_file = open('%s/%s' % (settings.MEDIA_ROOT, str(path) + str(filename)), 'wb+') 
    for chunk in file.chunks(): 
     destination_file.write(chunk) 
    destination_file.close() 

回答

2

在您的下載視圖中,您只是呈現download.html,但您並未向其發送任何上下文。我可能會發送工作表的查詢集(Worksheet.objects.all())作爲上下文到模板。然後在模板中執行類似於

{% for worksheet in worksheets %} 

{{ worksheet.worksheet_file.url }} 

{% endfor %} 

然後,您將在WorkSheet.objects.all()查詢中顯示所有文件URL。

如果可能,我會處理模型文件本身中的所有上傳邏輯,例如this