Django modellek megjelenítése az oldalon
Sziasztok!
Most próbálgatom a Django-t és nem tiszta pár dolog.
Van appom, settings.py, urls.py, admin.py, templates (base.html, cimoldal.html) beállítva.
models.pyA body-t látom az adminban, írni is tudok bele és bele is kerül az adatbázisba.
A "cimoldal.html"-be mit kell írni, hogy kiprintelje?:)
views.pyRemélem érthető a kérdés, köszönöm.
■ Most próbálgatom a Django-t és nem tiszta pár dolog.
Van appom, settings.py, urls.py, admin.py, templates (base.html, cimoldal.html) beállítva.
models.py
from django.db import models
class Who(models.Model):
body = models.TextField()
A "cimoldal.html"-be mit kell írni, hogy kiprintelje?:)
views.py
from django.shortcuts import render_to_response
def Who(request):
return render_to_response('cimoldal/cimoldal.html',)
Templates
Köszönöm
"Csak" annyit szerettem volna, hogy amit adminban beírok a body-ba azt lássam a /cimoldal-on
Lehet messze vagyok még a megoldástól, reménykedtem benne, hogy már csak a cimoldal.html-be kell írjak valamit:P
Különböző tutorialokból szedtem össze ami egyelőre van, de tényleg homály sajnos.
settings.py - csak a lényeges részek
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates'),
)
INSTALLED_APPS = (
'django.contrib.admin',
'kezdet.cimoldal',
)
urls.py
(r'^cimoldal/', 'kezdet.cimoldal.views.Who'),
models.py
# Create your models here.
class Who(models.Model):
body = models.TextField()
views.py
def Who(request):
return render_to_response('cimoldal/cimoldal.html',)
cimoldal.html - Ezt látom is http://127.0.0.1:8000/cimoldal/
{% block title %}Asd{% endblock %}
{% block main %}
<h1>Asd {{ name }}!</h1>
<p>
Asd asd asd asd asd
</p>
{% endblock %}
Az admin felületen a Who-ban a body-ba tudtam írni és benne is van az adatbázisban. Egyelőre itt tartok.
Hiányzik az objektum lekérése
index
nézet kifejtésénél.(A Python névkonvenciója szerint a függvény és metódus nevek „lower_case_with_underscores” stílusban íródnak, ezért a
Who
nézet helyesenwho
. A nézetek elnevezései egyébként praktikusan utalnak a funkciójára is. Ha egy konkrét objektumot jelenítesz meg, akkor lehetnewho_detail
, ha egy listát azokról, akkorwho_index
a nézet neve.)object_detail
néven eléred az objektumot. Acontext_instance
megadása nem szükséges, viszont célszerű mindig használni: ennek hatására a sablonod megkap egy rakat „környezeti” változót, így a site neve, aktuálisan belépett user stb.A fenti megoldást persze lehet még finomítani, hogy URL-ben megkapott azonosítójú objektumot töltse be. Erre egyébként van még egyszerűbb tálalás a generikus nézetek segítségével, erről szól a negyedik fejezet.
Köszönöm szépen
from django.shortcuts import render_to_response
from django.template import RequestContext
from kezdet.cimoldal.models import Who
def who_detail(request):
instance = get_object_or_404(Who, pk=1)
return render_to_response('cimoldal/cimoldal.html',
{'object_detail': instance},
context_instance=RequestContext(request))
A http://127.0.0.1:8000/cimoldal/ ezt adja
File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 280, in run
self.result = application(self.environ, self.start_response)
File "/usr/lib/python2.5/site-packages/django/core/servers/basehttp.py", line 674, in __call__
return self.application(environ, start_response)
File "/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 245, in __call__
response = middleware_method(request, response)
File "/usr/lib/python2.5/site-packages/django/middleware/common.py", line 84, in process_response
if response.status_code == 404:
AttributeError: 'Who' object has no attribute 'status_code'
Tudom, hogy még mindig nem értem. Amit írtál views.py az sokat segített, néhány dolog már letisztult:)
kisbetűs view
urls.py
-ban is javítottad a nézet nevét kisbetűsre?Nem
Viszont még mindig nem sikerül,:)
Exception Type:
ViewDoesNotExist
Exception Value:
Tried who in module kezdet.cimoldal.views. Error was: 'module' object has no attribute 'who'
urls.py
A detail-t nem írtam ki a who után.
A cimoldal.html-ben hogyan is érem el az object_detail-t?
Próbáltam a for in-el de nem sikerül:)
Sikerült
Köszönök minden segítséget!:)