Problem z wyświetleniem końcowego widoku

11 views
Skip to first unread message

killerbees1982

unread,
Aug 8, 2017, 1:21:20 PM8/8/17
to django-pl - grupa polskiej społeczności Django
Witam.
Mam problem z wyświetleniem widoku w pliku index.html. Mam stworzone jak na razie dwie klasy w pliku models.py , 3 pliki html z czego 2 są extends odnośnie index.html. Problem polega na tym, że wpisując localhost:8000 wyświetla mi index.html z blokiem tylko z jednego pliku, gdzie chciałem aby wyświetlało 2 różne bloki. Może ktoś zerknie i napisze mi co źle robię? Z góry dziękuję.
models.py

from django.db import models
from django.utils import timezone


class Kategorie(models.Model):
    glowna
= models.CharField(max_length=150, verbose_name='Kategoria')

   
class Meta:
        verbose_name
='Kategoria'
        verbose_name_plural
='Kategorie'

   
def __str__(self):
       
return self.glowna


class Witryna(models.Model):
    nazwa
= models.CharField(default="", max_length=150, verbose_name = 'Nazwa strony')
    adres_www
= models.CharField(max_length=70, verbose_name='Adres www')
    slug
= models.SlugField(max_length=250, verbose_name='Przyjazny adres url')
    email
= models.CharField(max_length=100, verbose_name='Adres e-mail')
    text
= models.TextField(max_length=3000, verbose_name='Opis strony')
    kategoria
= models.ForeignKey(Kategorie, verbose_name='Kategoria')
    data_publikacji
= models.DateTimeField(blank=True, null=True, verbose_name='Data publikacji')

   
class Meta:
        verbose_name
='Strona www'
        verbose_name_plural
= 'Strony www'

   
def publikacja(self):
       
self.data_publikacji=timezone.now()
       
self.save()

   
def __str__(self):
       
return self.nazwa

urls.py

from django.conf.urls import url
from . import views

urlpatterns
= [
    url
(r'^strony$', views.widok_strony, name='widok_strony'),
    url
(r'^$', views.widok_kategorii, name='widok_kategorii'),
]

views.py

from django.shortcuts import render
from .models import Witryna, Kategorie
from django.utils import timezone
from django.db.models import Count


def widok_strony(request):
    firmy
= Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
   
return render(request, 'firmy/widok_strony.html', {'firmy': firmy})

def widok_kategorii(request):
    kategorie
= Kategorie.objects.all()
    wpisy_kat
= Witryna.objects.annotate(cnt_kategoria=Count('kategoria'))
   
return render(request, 'firmy/widok_kategorii.html', {'kategorie': kategorie, 'wpisy_kat': wpisy_kat})
widok_kategorii.html

{% extends 'firmy/index.html' %}

{% block kategorie %}


{%  for kategoria in kategorie %}

<table>
<tr>
<td>
<a href="#">{{ kategoria.glowna|linebreaksbr }} </a>
{% for wpis in wpisy_kat %}
({{ wpis.id }})
{% endfor %}
</
td>
</tr>
</
table>
{%  endfor %}
{% endblock %}
widok_strony.html

{% extends 'firmy/index.html' %}
{% block firma %}
{%  for firma in firmy %}

<div>
<img src="http://free.pagepeeker.com/v2/thumbs.php?size=s&url={{ firma.adres_www }}"/>
<a href="">{{ firma.nazwa }}</a><p>
</div>
{%  endfor %}
{% endblock %}
index.html

{% include 'firmy/header.html' %}
<html>
<body>
<h3>Ostatnio dodane</h3>
{% block firma %}
{% endblock %}
<h3>Kategorie</
h3>
{% block kategorie %}
{% endblock %}

</body>
{% include 'firmy/
footer.html' %}
</html>

Więc sprawa ma się mianowicie ta, że wyświetla mi się tylko widok z pliku widok_kategorii.html  z pliku widok_strony.html nic nie ma. Mówię oczywiście po wpisaniu localhost:8000 bo gdy wpiszę localhost:8000/strony to jak najbardziej załaduje mi się widok_strony.html. Próbowałem stosować include lecz niestety nic mi z tego nie wyszło.



Maciek Olko

unread,
Aug 8, 2017, 1:35:00 PM8/8/17
to django-pl - grupa polskiej społeczności Django

W trzecim argumencie funkcji render wewnątrz funkcji widoku widok_kategorii powinieneś dodać klucz firmy. W tej chwili go nie przekazujesz, dlatego nie wyświetlają się dane firm.


--
Otrzymujesz tę wiadomość, bo subskrybujesz grupę „django-pl - grupa polskiej społeczności Django” w Grupach dyskusyjnych Google.
Aby anulować subskrypcję tej grupy i przestać otrzymywać od niej wiadomości, wyślij e-maila na django-pl+...@googlegroups.com.
Aby opublikować wpis w tej grupie, wyślij e-maila na djan...@googlegroups.com.
Otwórz tę grupę na https://groups.google.com/group/django-pl.
Więcej opcji znajdziesz na https://groups.google.com/d/optout.

Maciek Olko

unread,
Aug 8, 2017, 1:39:49 PM8/8/17
to django-pl - grupa polskiej społeczności Django

def widok_kategorii(request):
    kategorie = Kategorie.objects.all() wpisy_kat =Witryna.objects.annotate(cnt_kategoria=Count('kategoria'))

firmy = Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')

    return render(request,'firmy/widok_kategorii.html',{'kategorie': kategorie, 'wpisy_kat': wpisy_kat, 'firmy': firmy})

killerbees1982

unread,
Aug 8, 2017, 2:08:28 PM8/8/17
to django-pl - grupa polskiej społeczności Django

Maciek zmieniłem tak jak radziłeś i teraz mam tak w views.py


from django.shortcuts import render
from .models import Witryna, Kategorie
from django.utils import timezone
from django.db.models import Count


def widok_strony(request):
    firmy
= Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
   
return render(request, 'firmy/widok_strony.html', {'firmy': firmy})

def widok_kategorii(request):
    kategorie
= Kategorie.objects.all()

    firmy
= Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')

    wpisy_kat
= Witryna.objects.annotate(cnt_kategoria=Count('kategoria'))

   
return render(request, 'firmy/widok_kategorii.html', {'kategorie': kategorie, 'wpisy_kat': wpisy_kat, 'firmy':firmy})Tutaj wprowadź kod...

No i po załadowaniu localhost:8000 jest bez zmian
"Ostatnio dodane" nie wyświetlają widoku z pliku widok_strony.html



Maciek Olko

unread,
Aug 8, 2017, 3:52:44 PM8/8/17
to django-pl - grupa polskiej społeczności Django

Tak powinien wyglądać szablon widok_kategorii.html, aby wyświetlał to, co chcesz:


{% extends 'firmy/index.html' %}
{% block firma %}
{%  for firma in firmy %}

<div>
<img src="http://free.pagepeeker.com/v2/thumbs.php?size=s&url={{ firma.adres_www }}"/> 
<a href="">{{ firma.nazwa }}</a><p>
</div>
{%  endfor %}
{% endblock %}

{% block kategorie %}

{%  for kategoria in kategorie %}

<table>
<tr>
<td>
<a href="#">{{ kategoria.glowna|linebreaksbr }} </a>
{% for wpis in wpisy_kat %}
({{ wpis.id }}) 
{% endfor %}
</td>
</tr>
</table>
{%  endfor %}
{% endblock %}


killerbees1982

unread,
Aug 9, 2017, 12:51:12 AM8/9/17
to django-pl - grupa polskiej społeczności Django
Maciek teraz wszystko jest jasne. W tym przypadku robię extends z jednego pliku na główny. Czy jest możliwość zrobienia takiej rzeczy jak: plik index.html jest plikiem strony głównej i na niej będą wyświetlane takie rzeczy jak: kategorie,ostatnio dodane,reklama itp. Chciałbym żeby to mi się wyświetliło w divach na stronie index. Czy w takim razie stosowanie extends ma tu zasadność czy bardziej include?

Maciek Olko

unread,
Aug 9, 2017, 2:52:13 AM8/9/17
to django-pl - grupa polskiej społeczności Django

W takim przypadku powinieneś użyć include'ów wewnątrz index.html w odpowiednich miejscach. A te małe szablony powinny zawierać tylko kod, który ma się znaleźć w wybranych miejscach.

Bloki (block) nie przydadzą się, bo one mają zastosowanie przy dziedziczeniu, a nie zawieraniu.


śr., 9.08.2017, 06:51 użytkownik killerbees1982 <killerb...@gmail.com> napisał:
Maciek teraz wszystko jest jasne. W tym przypadku robię extends z jednego pliku na główny. Czy jest możliwość zrobienia takiej rzeczy jak: plik index.html jest plikiem strony głównej i na niej będą wyświetlane takie rzeczy jak: kategorie,ostatnio dodane,reklama itp. Chciałbym żeby to mi się wyświetliło w divach na stronie index. Czy w takim razie stosowanie extends ma tu zasadność czy bardziej include?

--
Otrzymujesz tę wiadomość, ponieważ subskrybujesz grupę dyskusyjną Google o nazwie „django-pl - grupa polskiej społeczności Django”.


Aby anulować subskrypcję tej grupy i przestać otrzymywać od niej wiadomości, wyślij e-maila na django-pl+...@googlegroups.com.
Aby zamieszczać posty w tej grupie, wyślij e-mail na adres djan...@googlegroups.com.
Odwiedź tę grupę na https://groups.google.com/group/django-pl

killerbees1982

unread,
Aug 9, 2017, 3:13:06 AM8/9/17
to django-pl - grupa polskiej społeczności Django
No to bede musiał przepisać kod i zrobić include jak w phpie. Tylko przy include czasami jakieś błędy mi wyskakiwaly gdy zastosowałem znaczniki django.
Reply all
Reply to author
Forward
0 new messages