konto usunięte

Temat: jeden url - kilka akcji renderujacych template

Witam,
czy jest mozliwosc w Django aby dla jednego adresu URL zostały wykonane dwie różne akcje w taki sposób, aby jedna z nich pełniła rolę takiego "komponentu" - tzn rozszerzała tylko zdefiniowany blok template'a ( powiedzmy stopkę) a druga, głowna całość template'a(standardowo).Zapewne dało by sie napisać takie middleware'a ale zastanawiam się czy już nie ma gotowego takiego rozwiązania. Jeśli nie jest jasne o co mi chodzi, w kolejnym poscie postaram się lepiej wyjaśnić.
Łukasz Anwajler

Łukasz Anwajler Mobile & Web
Developer

Temat: jeden url - kilka akcji renderujacych template

Hm. Nie rozumiem 'po co'.

Myślę, że jest kilka sposobów na to, co ma renderować dany URL i można to kontrolować w views.py.

Możesz przykładowo sprawdzać czy na URL poszła metoda POST czy GET (request.method) albo request.is_ajax() i na jego podstawie decydować.

Nie wiem czy o to Ci chodziło, ale mam nadzieję, że udało mi się co nieco podpowiedzieć.

Jeżeli chodzi o coś innego, to sprecyzuj problem i coś wydumamy :)

Pozdrawiam!

konto usunięte

Temat: jeden url - kilka akcji renderujacych template

Pakowanie danych do wyświetlenia middlewarem to zwyczajnie zły pomysł, bo nie do tego służy. Mapowanie url do widoku jest 1 do 1. I też nie należy tego ruszać.

Enkapsulacja taka o jaką pytasz nazywa się template tag. :)

konto usunięte

Temat: jeden url - kilka akcji renderujacych template

No nie do konca chodzi mi o templatetag - trzeba go umieszczac w kazdym templacie, to co chcialem uzyskac to wlasnie brak koniecznosci każdorazowo w kazdym templacie rozszerzania bloku np stopki


{% block footer %}
{% rysuj_stopke %}
{% endblock %}


(powiedzmy ze na 5 stronach chcę mieć inną niż na kolejnych pięciu a do wyświetlenia jej potrzeba wykonac pokazny kawalek kodu - oczywiscie to tylko przykład)
Ten blok mialby się sam "w tle" requestu rozszerzac o odpowiedni kontent w zaleznosci od urla(definiowaloby sie dla jakich urli wykonac jaka akcje rozszerzajaca tylko blok stopki).Ale faktycznie, chyba jestem za leniwy i trzeba zrobic zwyklego templatetaga.Michał Swat edytował(a) ten post dnia 23.03.10 o godzinie 09:54
Michał Jastrzębski

Michał Jastrzębski Django-fu, phpjutsu,
sql-do

Temat: jeden url - kilka akcji renderujacych template

Można napisać jakąś funkcję parsującą url, i na podstawie sparsowanego urla ustawiala w context jakąś zmienną, która by podpinała odpowiedni kawałek template'u...dużo bezsensownej pracy jeśli ktoś mnie spyta. lepiej zrób parę template tagi...przecież dodanie do następnej strony to tylko copypasta...

konto usunięte

Temat: jeden url - kilka akcji renderujacych template

Michał Swat:
No nie do konca chodzi mi o templatetag - trzeba go umieszczac w kazdym templacie, to co chcialem uzyskac to wlasnie brak koniecznosci każdorazowo w kazdym templacie rozszerzania bloku np stopki


{% block footer %}
{% rysuj_stopke %}
{% endblock %}


(powiedzmy ze na 5 stronach chcę mieć inną niż na kolejnych pięciu a do wyświetlenia jej potrzeba wykonac pokazny kawalek kodu - oczywiscie to tylko przykład)
Ten blok mialby się sam "w tle" requestu rozszerzac o odpowiedni kontent w zaleznosci od urla(definiowaloby sie dla jakich urli wykonac jaka akcje rozszerzajaca tylko blok stopki).Ale faktycznie, chyba jestem za leniwy i trzeba zrobic zwyklego templatetaga.Michał Swat edytował(a) ten post dnia 23.03.10 o godzinie 09:54

Najlepiej przez templatetag tylko z możliwością sterowania zawartością stopki w zależności od modułu/widoku/akcji (+ zawsze zostawienie możliwości nadpisania całej stopki lub dopisania).. np:

base.html

{% load render_my_footer %}
<html>
...
{% block content %}{% endblock %}
...
{% block footer %}
{% render_my_footer my_var %}
{% endblock %}
</html>


view1

def index(request):
return render_to_response('1.html', {
'my_var': 'render_for_index',
}, context_instance=RequestContext(request))


view2

def forum(request):
return render_to_response('2.html', {
'my_var': 'render_for_forum',
}, context_instance=RequestContext(request))


3.html

{% block footer %}
{{ block.super }}
Add something to standard footer for 3.html
{% endblock %}


4.html

{% block footer %}
Overload footer for 4.html
{% endblock %}

Temat: jeden url - kilka akcji renderujacych template

Template tag i/lub kilkupoziomowe dziedziczenie.

Dla każdej aplikacji tworzysz osobny base.html który dziedziczy z głównego pliku base.html i rysuje własną stopkę.

base.html

<body>
<div id="footer">
{% block footer %}
Standardowy footer
{% endblock %}
</div>
</body>


aplikacja/base.html

{% extends 'base.html' %}
{% block footer %}
Footer specyficzny dla aplikacji lub {% template tag %}
{% endblock %}


I teraz templaty z kazdej aplikacji dziedzicza z aplikacja/base.html

aplikacja/widok.html

{% extends 'aplikacja/base.html' %}

{% block footer %}
{{ block.super }}
I można jeszcze coś dopisać do stopki
{% endblock %}


W dodatku można to jeszcze uprościć stosując tzw inclusion tagsArtur Czepiel edytował(a) ten post dnia 06.04.10 o godzinie 11:47

Następna dyskusja:

Zapraszam do grupy Polskiej...




Wyślij zaproszenie do