大家好,小弟初學django,現在想學著做一個下載功能,前台html設置超鏈接,通過後台訪問方法獲取到文件名並下載。
程式碼如下:
前台:(比較簡單,只是一個table裡面套帶超連結的字)
#URL配置:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^register/',views.userRigister,name='register'),
url(r'^register/(.*)/$',views.file_download,name='download'),
]
VIEW方法:
def userRigister(req):
status='welcome'
#js alert出信息
return render(req, 'register.html', {'status':json.dumps(status)})
def file_download(request,filename):
print(filename)
def file_iterator(file_name, chunk_size=1024):
with open(file_name) as f:
while True:
c = f.read(chunk_size)
if c:
yield c
else:
break
if os.path.exists('software/' + filename):
the_file_name = filename
response = StreamingHttpResponse(file_iterator(the_file_name))
return response
else:
return HttpResponse('error!no such file!')
小弟的目的是正常造訪同一個頁面時,選擇可下載的瀏覽器,點擊超連結按鈕後,造訪file_download
方法並下載對應瀏覽器。但是目前無法存取file_download
方法,懇請各位大神指點。謝謝了
阿神2017-05-18 10:58:48
Django匹配url的時候是在url列表中從上往下依次匹配
能被^register/(.*)/$
匹配的一定能被上面的^register/< /code>匹配
^register/(.*)/$
匹配的一定能被上面的^register/
匹配
所以就出现了^register/(.*)/$
所以就出現了^register/(.*)/$
永遠匹配不到的情況
解決方法很簡單,這兩個調個順序就好
url(r'^admin/', admin.site.urls),
url(r'^register/(.*)/$',views.file_download,name='download'),
url(r'^register/',views.userRigister,name='register'),
在使用Django的url解析功能的時候,要記住越詳細的url要越往前放,越「模糊」的url要越靠後。