tldr: проблемы с доступом к атрибуту url файлового поля привели меня к пониманию, что мне также нужно проверить, как обслуживать медиа-файлы в режиме отладки с помощью django runserver. Я понятия не имею, как продолжить. : (
длинная версия:
Привет
Я Django новичок ie и совершенно потерял способ доступа к объекту файлового поля с помощью браузера.
Вот мой файл settings.py в проекте root:
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'rgeingabe/documents/')
MEDIA_URL = ''
#STATIC_URL = 'static/'
#STATIC_ROOT = os.path.join(BASE_DIR, 'rgeingabe/static')
Я также установил для режима DEBUG значение true.
Вот urls.py:* проекта 1014 *
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^rgeingabe/', include('rgeingabe.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Я надеюсь, что правильно включить эту информацию о состоянии c в urls.py проекта. Сначала я попытался сделать это в urls.py приложения, но думаю, что это было неправильно.
Далее, к models.py:
class Document(models.Model):
beschreibung = models.CharField(max_length=255, blank=True)
datei = models.FileField(upload_to='')
hochgeladen_am = models.DateTimeField(auto_now_add=True)
gehoert_zu_rg = models.ForeignKey('Pkvjanosch', on_delete=models.CASCADE)
def save(self, rgauswahl, *args, **kwargs):
d = Pkvjanosch.objects.get(rg_id = rgauswahl)
neuer_dateiname = d.rgsteller + " " + d.rgdatum.strftime("%d.%m.%Y")
self.datei.name = neuer_dateiname
super(Document, self).save(*args, **kwargs)
d.scanablageort = neuer_dateiname
d.save()
Я пытаюсь получить доступ к загрузке с помощью представления. Вот идет представление приложения views.py:
def uebersichteingaben_alle(request):
eingaben_alle_liste = get_list_or_404(Pkvjanosch)
alle_uploaddateien = get_list_or_404(Document)
context = {
'eingaben_alle_liste': eingaben_alle_liste,
'alle_uploaddateien': alle_uploaddateien
}
return render(request, 'rgeingabe/eingaben_alle.html', context)
И наконец, я попробовал дюжину подходов, как получить доступ к объекту с помощью шаблона. Итак, я начал с чего-то вроде upload.url, но это не сработало. Ни один не сделал подходы, такие как "{% url upload %}"
, "{% url upload.datei %}"
, "{{upload.datei.url}}
и еще много. Это как если бы upload.url
просто пусто. Вот шаблон:
<html>
<body>
<h1>Übersicht aller Eingaben</h1>
{% if eingaben_alle_liste %}
<table style="border-style:solid;border-width:3px;" rules="all">
<tr>
<th>ID</th>
<th>Rechnungssteller</th>
<th>Rechnungsdatum</th>
<th>Rechnungsbetrag</th>
<th>TK Übernahme</th>
<th>Continentale Übernahme</th>
<th>Abrechnungszeitraum</th>
<th>Anmerkungen</th>
<th>Scan</th>
</tr>
{% for eintrag in eingaben_alle_liste %}
<tr>
<td><a href="{%url 'rg_janosch:rgupdate' eintrag.rg_id %}">{{ eintrag.rg_id }}</a></td>
<td>{{ eintrag.rgsteller }}</td>
<td>{{ eintrag.rgdatum }}</td>
<td style="text-align:right;">{{ eintrag.rgbetrag }}</td>
<td style="text-align:right;">{{ eintrag.tkbetrag}}</td>
<td style="text-align:right;">{{ eintrag.contibetrag }}</td>
<td style="text-align:center;">{{ eintrag.rg_zeitraum }}</td>
<td>{{ eintrag.anmerkung }}</td>
{% if eintrag.scanablageort %}
{% for upload in alle_uploaddateien %}
{% if upload.gehoert_zu_rg_id == eintrag.rg_id %}
<td><a href="documents/{{ upload.datei }}">Scan</a></td>
<td>upload.datei: {{upload.datei}}</td>
{% endif %}
{% endfor %}
{% else %}
<td> </td>
{% endif %}
</tr>
{% endfor %}
</table>
{% else %}
<p>Keine Einträge vorhanden.</p>
{% endif %}
</body>
</html>
Я надеюсь, что вы можете мне помочь.:)