2017-12-17 14 views
0

アップロードされたファイルをダウンロードするためのリンクを作成しようとしています。ダウンロードリンクを生成する方法

models.py

class Comentario (models.Model): 

    archivo = models.FileField(upload_to='media', null=True, blank=True) 

settings.py

MEDIA_ROOT=os.path.join(BASE_DIR, 'media') 
MEDIA_URL='/media/' 

template.html

<a href="{{ MEDIA_URL }} {{detail.archivo.url}}" download>Descargar</a> 

views.py

def ComentarioListar(request): 
    form2 = ComentarioForm(request.POST or None, request.FILES or None) 
    if request.method == 'POST' and form2.is_valid(): 
     form2.instance.autor = request.user 
     form2.save() 
     return HttpResponseRedirect('http://127.0.0.1:8000/home/listar') 

objects= Comentario.objects.filter(tag__in=bb).exclude(autor__id=request.user.id)[:5] 

return render(request, 'home/comentario_listar.html', {'objects': objects, 'form2':form2}) 

urls.py

urlpatterns = [ 
    url(r'^download/(?P<filename>.+)$', login_required(views.download), name='download')] 

私はそれが「メディア」フォルダに保存されているの.jpgをダウンロードしないダウンロードリンクをクリックしてください。パスが間違って指定されていますか?そのために特別なビューを作成する必要がありますか?

+1

は 'A'要素を右クリックし、それを点検します。 'href'の値は? –

+0

今、私の値は127.0.0.1:8000/media/ – JohnWire

+0

です。 'detail'がテンプレートに渡される場所に' views.py'を表示してもよろしいですか? –

答えて

0

あなたの問題はあなたがComentarioのクエリセットを渡しているということであるあなたの答えをありがとう「オブジェクト」としてテンプレートに通じオブジェクトが、あなたは、すべてのテンプレート内で「オブジェクト」を参照していません。

ここでは、「オブジェクト」クエリーセット内の各オブジェクトのURLリストを取得する方法の例を示します。ここでは、「オブジェクトのクエリセット内の各オブジェクトを反復処理し、テンプレートにそのarchivo.urlを引き出す:

comentario_listar.html

{% for object in objects %} 
    <a href="{{ object.archivo.url }}">Descargar</a> 
{% endfor %} 

あなたが望んでいたかのことに注意してください、あなたもcomentario_listar.html単一のオブジェクトを渡すと、そのように、そのオブジェクトのURLをレンダリングすることができます:

views.py

def ComentarioListar(request): 
    form2 = ComentarioForm(request.POST or None, request.FILES or None) 
    if request.method == 'POST' and form2.is_valid(): 
     form2.instance.autor = request.user 
     form2.save() 
     return HttpResponseRedirect('http://127.0.0.1:8000/home/listar') 

    // Create a variable called 'detail' that references just one Comentario object, and pass it to the comentario_listar.html template 
    detail = Comentario.objects.all()[0] 

    return render(request, 'home/comentario_listar.html', {'detail': detail, 'form2':form2} 

comentario_listar.html

<a href="{{detail.archivo.url}}" download>Descargar</a> 
+0

私はそれを調べて、hrefは/ media /です。しかし、 "{{detail.archivo.url}}"は動作しません。どうすればいいですか?7 – JohnWire

+0

'detail'オブジェクトがviews.pyのテンプレートに渡されていないようです。テンプレートをレンダリングするviews.pyのセクションを教えてください。 – Sam

+0

あなたの質問を編集しました。あなたはviews.pyとurls.pyを見ることができます。 – JohnWire

関連する問題