Maison > Questions et réponses > le corps du texte
Bonjour à tous, je suis nouveau sur Django. Maintenant, je veux apprendre à créer une fonction de téléchargement. Configurez un lien hypertexte dans le HTML frontal, obtenez le nom du fichier et téléchargez-le via la méthode d'accès en arrière-plan.
Le code est le suivant :
Réception : (relativement simple, juste un tableau avec des mots hypertextes)
Configuration URL :
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^register/',views.userRigister,name='register'),
url(r'^register/(.*)/$',views.file_download,name='download'),
]
Méthode 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!')
Mon objectif est de sélectionner un navigateur téléchargeable lorsque vous accédez normalement à la même page, et de cliquer sur le bouton hyperlien pour accéder à la méthode file_download
方法并下载对应浏览器。但是目前无法访问到file_download
. Veuillez me donner quelques conseils. Merci
阿神2017-05-18 10:58:48
Django fait correspondre les URL de haut en bas dans la liste d'URL
Tout ce qui peut être mis en correspondance par ^register/(.*)/$
doit correspondre au ^register/< /code ci-dessus > matches
^register/(.*)/$
匹配的一定能被上面的^register/
匹配
所以就出现了^register/(.*)/$
Il y a donc une situation où ^register/(.*)/$
ne correspond jamais
La solution est très simple, il suffit de changer l'ordre de ces deux
url(r'^admin/', admin.site.urls),
url(r'^register/(.*)/$',views.file_download,name='download'),
url(r'^register/',views.userRigister,name='register'),
Lorsque vous utilisez la fonction d'analyse d'URL de Django, n'oubliez pas que les URL plus détaillées doivent être placées plus en avant et que les URL plus « floues » doivent être placées plus en arrière.