Mam model File
, który przechowuje ścieżkę path
w systemie plików do pliku. Wszystkie pliki są przechowywane w pliku MEDIA_ROOT/filesDjango: generuj łącze pobierania
W szablonie chcę wygenerować łącze pobierania dla obiektu File
. Jaki jest najlepszy sposób na zrobienie tego? Czy należy używać obsługi plików statycznych w django?
TIA!
UPD
File
modelu
class File(models.Model):
item = models.ForeignKey(Item)
file = models.FileField(upload_to = os.path.join(MEDIA_ROOT,'items'))
format = models.CharField(max_length = 255)
W widoku elementu I wykonaj następujące czynności:
files = File.objects.filter(item_id = id)
i podanie files
do szablonu
w szablonie używam files.1.file.url
na przykład i nadal mają złe url jak site.com/home/dizpers/...
UPD2
Rozwiązanie
Mój problem był w modelu pliku, w file
dziedzinie. W parametrze upload_to użyć ścieżki bezwzględnej, ale musi użyć ścieżki względnej:
file = models.FileField(upload_to = 'items')
I będzie działać dla mojego niestandardowego obiektu File? Nie obiekt pliku django. – dizpers
Próbowałem. Nie działa. nadal dostaję adresy URL takie jak site.com/home/dizpers/data/......./file.pdf gdzie 'home/dizpers/...' jest ścieżką do pliku na dysku – dizpers
Zakładałem, że twoje ' Model pliku nadal wykorzystywał prawdziwy niebieski "FileField" zamiast zwykłego 'CharField'.Naprawdę nie ma powodu, aby tego nie robić, ponieważ oba są przechowywane w ten sam sposób w bazie danych; 'FileField' ma po prostu API do obsługi operacji we/wy. Niemniej jednak, jeśli potrzebujesz bardzo prostego linku, możesz użyć plików '{{MEDIA_URL}}/{{file_instance.path}}'. –