搜尋

首頁  >  問答  >  主體

python - Django前台url未能正確訪問方法求助?

大家好,小弟初學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方法,懇請各位大神指點。謝謝了

为情所困为情所困2756 天前633

全部回覆(1)我來回復

  • 阿神

    阿神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要越靠後。

    回覆
    0
  • 取消回覆