Forum » Programiranje » 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):
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.
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'.
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:
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
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 ::
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.
Po defaultu že doda podatke o uporabniku, seji, zahtevi... Lahko pa preprosto dodaš kakšne svoje custom zadeve.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Apache in Node.JSOddelek: Izdelava spletišč | 1955 (1641) | dunda |
» | Google font - (č,ž,š) delajo local, na hostu pa ne delujejoOddelek: Izdelava spletišč | 2331 (2123) | neoserv |
» | HTML in SQL pomoč (strani: 1 2 )Oddelek: Programiranje | 7613 (6491) | def0r |
» | .htaccess rewrite za poddomenoOddelek: Izdelava spletišč | 1436 (1356) | alessio2 |
» | [Java] Shranjevanje podatkov in datotekOddelek: Programiranje | 1229 (1182) | Vesoljc |