0

Ich benutze django-tables2 und habe eine Ansicht, die grundsätzlich Benutzer Zugriff auf den Datenspeicher ermöglichen sollte. Mein Tischmodell ein Link Spalt hat sich wie folgt:herunterladbare Dateilink in Django-Tabellen

class DummyTable(tables.Table): 
    download = tables.LinkColumn('dummy_download', args=[tables.A('pk')], orderable=False, 
           empty_values=(), verbose_name='') 

Die Wiedergabe der Link Spalte wie folgt durchgeführt wird:

class Meta: 
     model = DummyModel 
     attrs = {'class': 'paleblue'} 


    def render_download(self):   
     url = static('cloud-download.png') 
     media_root = settings.MEDIA_ROOT 
     href = media_root + "/mask.nii.gz"   
     return mark_safe('<a href="' + href + '"><img src="' + url + '"></a>') 

Also im Grunde habe ich einige Daten in meinem /media Ordner, die ich mag um dem Benutzer das Herunterladen zu ermöglichen, wenn auf den Link geklickt wird. Ich bin jedoch nicht in der Lage, den richtigen Link in der render_download Methode zu generieren. Wenn ich den Link einfach so anlege, wie ich ihn habe, wird kein Download gestartet, obwohl er auf den korrekten Speicherort der Datei (lokal) zu zeigen scheint. Ich bin mir auch nicht sicher, ob das funktioniert, wenn jemand aus der Ferne eine Verbindung herstellt. Ich habe das Gefühl, es sollte intern eine reST-API aufrufen, um den Download zu starten, aber ich bin mir nicht sicher, wie ich das erreichen soll.

Die settings.py Datei konfiguriert die media Einstellungen wie folgt:

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

Ich versuchte, die MEDIA_URL als Link verwenden, aber dann versucht er es mit URL-Konfigurationen und kehrt zu passen mit:

Using the URLconf defined in cloud.urls, Django tried these URL patterns, in this order: 

^admin/ 
^$ [name='index'] 
^login/$ [name='login'] 
^logout/$ [name='logout'] 
^images/$ [name='images'] 
^static\/(?P<path>.*)$ 
The current URL, media/mask.nii.gz, didn't match any of these. 

Antwort

1

Ich denke, Sie sollten den Wert MEDIA_URL anstelle von MEDIA_ROOT:

erhalten

Möglicherweise müssen Sie Ihrem Hauptordner urls.py Folgendes hinzufügen, damit Ihre Mediendateien vom Entwicklungswebserver bereitgestellt werden können.

# urls.py 

... 
from django.conf import settings 
from django.conf.urls.static import static 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

urlpatterns = [ 
    # ...your routes... 
] 

urlpatterns += staticfiles_urlpatterns() 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
+0

Danke für die Antwort! Ich habe es versucht, aber es versucht, es mit URL-Mustern zu vergleichen. Ich habe die Antwort aktualisiert, um den Fehler zu enthalten. – Luca

+0

Sie haben mich dazu geschlagen. Ich habe gerade geschrieben, dass ich es herausgefunden habe! – Luca

Verwandte Themen