» »

Django template language - trik

Django template language - trik

marjan_h ::

Imam spletišče, zgrajeno iz base.html in ostali html-ji kjer uporabljam extends, tako da se base.html razširi. Problem je v tem, ko se uporabnik logira, se to pošlje v base.html s trikom v kodi, vendar čeprav je base.html in bi moralo delovati za vse strani ta trik ne dela.



Torej kaj naredim v kodi (views.py):

def index(request):
    if 'user_na' in request.session:
        #Berem podatke iz seje
	    user_na = request.session['user_na']
        # Podatke pošljem base.html
        return render(request, 'base.html', {'user_name':user_na, 'str_len': len(user_na)})
    #Da se ne bi prikazala samo base.html, na koncu izrišem index.html
    return render_to_response('index.html', context_instance=RequestContext(request))



Sedaj bi bilo neumno dati "Logged in as:" v vse te strani, če je ravno namen dedovanja v tem da se zmanjša potreba po programiranju.

ragezor ::

V base.html rabis kodo, ki zgleda nekako takole:

if user: 'Logged in as', user.name
else: 'Please login'

Ce ma index.html ze noter base.html, potem renderas index.html in das noter podatke o userju. Nikoli ne renderas base.html. Vedno renderiras tisti template, ki je najbolj specificen oz nevem kako bi ti to razlozil. Ker, ko renderiras tisti template, ki vsebuje v sebi druge template, se templati zlepijo skupaj v enega. Zato rabis podati podatke samo tistemu 'zlepljenemu'.

marjan_h ::

Torej hočeš reči, da index template že vsebuje "user_name", in renderiram tako:
return render(request, 'index.html', {'user_name':user_na, 'str_len': len(user_na)})

Kaj pa drugi template-i? Torej moram za vsak template v views.py brati iz seje in poslati podatke vsakemu, zato da se prikaže na straneh "You are logged as..."?

Hvala za odgovor

dasf ::

Podatki o uporabniku (request.user) so dostopni v vseh template-ih, brez da bi posebej kaj dodajal v context.

pirlo ::

marjan_h je izjavil:

Torej hočeš reči, da index template že vsebuje "user_name", in renderiram tako:

return render(request, 'index.html', {'user_name':user_na, 'str_len': len(user_na)})

Kaj pa drugi template-i? Torej moram za vsak template v views.py brati iz seje in poslati podatke vsakemu, zato da se prikaže na straneh "You are logged as..."?

Hvala za odgovor

Sicer nisem delal s pythonom nikoli, ampak samo erlang in erlydtl; ampak odgovor na vprašanje je da.
Mi rešujemo take stvari tam tako da imamo funkcijo base_params, katera napolni vse spremenljivke za base, zraven pa prilepimo še spremenljivke za specifično stran.

dasf ::

Jap, v django-tu se to počne z "template context processorji" link.

Po defaultu že doda podatke o uporabniku, seji, zahtevi... Lahko pa preprosto dodaš kakšne svoje custom zadeve.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Apache in Node.JS

Oddelek: Izdelava spletišč
91949 (1635) dunda
»

Google font - (č,ž,š) delajo local, na hostu pa ne delujejo

Oddelek: Izdelava spletišč
82323 (2115) neoserv
»

HTML in SQL pomoč (strani: 1 2 )

Oddelek: Programiranje
517575 (6453) def0r
»

.htaccess rewrite za poddomeno

Oddelek: Izdelava spletišč
71433 (1353) alessio2
»

[Java] Shranjevanje podatkov in datotek

Oddelek: Programiranje
71224 (1177) Vesoljc

Več podobnih tem