• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak wyświetlić zdjęcie w django z bazy danych?

Object Storage Arubacloud
0 głosów
1,384 wizyt
pytanie zadane 6 listopada 2015 w Python przez Kaspero Obywatel (1,920 p.)

Witaj cie mam następujące pole w models.py:

from django.db import models
# Create your models here.

def upload_loaction(instance,filename):
	location = str(instance.name)
	return "%s/%s" %(location,filename)

class Discipline(models.Model):
	name = models.CharField(max_length=120, null=True, blank=True)
	picture = models.ImageField(upload_to=upload_loaction, null=True, blank=True)

	def __str__(self):
		return self.name

nie wiem jak w template wyświetlic wprowadzone zdjęcie, co gorsze gdy w views.py robię:

disc = Discipline(name=i)
print (disc)
print(disc.picture.url)

 

to wyświtla pustą linię, przeciez w media sa zdjęcia

3 odpowiedzi

+1 głos
odpowiedź 6 listopada 2015 przez Tomatosoup Pasjonat (18,530 p.)
Niejako łamiesz tutaj zasady działania wzorca projektowego MVC albo raczej precyzując MVT, czyli model-view-template. Widok, czyli view.py jest od tego żeby właśnie wyświetlać i obsługiwać zdarzenia a nie od tworzenia modeli.

Nie ma też miejsca w kodzie w którym miałbyś wgrać zdjęcie do obiektu, więc jak chcesz je wyświetlić ? Nie pokazałeś mi też całego kodu, jak wygląda forms.py i sam template. Do tego, żeby utworzony obiekt został zapisany musi być wywołana funkcja object.save()

Z czego co widzę ma to być zdjęcie profilowe, więc powinien być na stronie stosowny formularz za pomocą którego wysyła się żądanie o zmiane właśnie tego zdjęcia, więc musisz zrobić formularz w forms.py, polecam przeczytanie o tym w https://docs.djangoproject.com/en/1.8/topics/forms/ , zajrzyj do ModelForm bo bardzo możliwe że to Ci będzie odpowiadać.

Jak już masz na stronie formularz, zajmimy się views.py. Musisz utworzyć tam warunek który sprawdza, czy żadanie jest typu POST i obsłużyć tam formularz a następnie zwrócić go funkcją render(), to wszystko znajdziesz w dokumentacji w powyższym linku.

Wyświetlenie zdjęcia w szablonie będzie wyglądać tak jak już pisałem:

<img src="{{ profile.picture.url }}">

Do tego polecam zaznajomienie się z obiektowym widokiem: https://docs.djangoproject.com/en/1.8/topics/class-based-views/

Jeżeli masz jeszcze jakieś pytania to pisz w komentarzu pod tym moim postem, będzie wygodniej. Kodu pisać za Ciebie nie będę, ale wytłumaczyłem chyba wszystko, a na stackoverflow znajdziesz mnóstwo snippetów do tego typu problemu.
komentarz 7 listopada 2015 przez Kaspero Obywatel (1,920 p.)
Bradzo dziekuje za pomoc, z tym save moze cos pomyslę.
0 głosów
odpowiedź 6 listopada 2015 przez Tomatosoup Pasjonat (18,530 p.)
Każdy ImageField posiada swój atrybut url, możesz się do niego odnieść w ten sposób:

<img src="{{ object.picture.url }}">

Jeżeli zdjęcie się nie będzie wyświetlać, skonfiguruj media root i url w settings.py

MEDIA_ROOT = '/path/'
MEDIA_URL = '/path'

Jeżeli dalej nie będzie działać podaj kod views.py
0 głosów
odpowiedź 6 listopada 2015 przez Kaspero Obywatel (1,920 p.)

moje media wyglada tak:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static", "media_root")

 

models.py tak:

def upload_loaction(instance,filename):
    location = str(instance.name)
    return "Disciplines/%s/%s" %(location,filename)

class Disciplines(models.Model):
    name = models.CharField(max_length=120, null=True, blank=True)
    picture = models.ImageField(upload_to=upload_loaction, null=True, blank=True)

    def __str__(self):
        return self.name

views.py 

from django.core.context_processors import csrf
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404
# Create your views here.

from .forms import ProfileForm

User = get_user_model()
from .models import Profile


@login_required
def profile_views(request, username):
	user = get_object_or_404(User,username=username)
	profile,created = Profile.objects.get_or_create(user=user)
	#***********************czesc najwazniejsza**********************************
	for i in profile.sport_choose:
		disc = Discipline(name=i)
		print(disc.picture.url)#tutaj nic sie nie pokazuje ;)
	context={
		"profile":profile,
	}
	return render(request, "profile_view.html",context)
	#***********************czesc najwazniejsza**********************************

 

 

Podobne pytania

+1 głos
1 odpowiedź 362 wizyt
0 głosów
0 odpowiedzi 125 wizyt
0 głosów
1 odpowiedź 651 wizyt

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...