[Fixed]-Django: generate download link


I’m not sure what exactly you mean by “generate download link”, but to simply link to the file, just use {{ some_file.url }} as your href.


In models.py:

import os

from django.conf import settings
from django.db import models

class File(models.Model):
    ... (your existing File model)

    def relative_path(self):
        return os.path.relpath(self.path, settings.MEDIA_ROOT)

(using the relpath method to strip MEDIA_ROOT from the value of self.path)

In your file_detail.html (or equivalent) template:

<a href='{{ MEDIA_URL }}{{ file.relative_path }}'>{{ file.name }}</a>

NB as Chris says, it’s better to use a FileField here. The above will hopefully work for your exact situation, but unless you’re deeply committed to arranging things that way, I’d suggest changing to the dedicated field.


try using href="{{ STATIC_URL }}/files/somefile", or href="{{ MEDIA_URL }}/files/somefile" for user uploaded content


Leave a comment