Merci à vous deux pour vos réponses.
Tout est en ordre maintenant.
Bon réveillon ce soir.
beegees
]]>J'ai l'impression que c'est le "return" dans la dernière ligne de la
vue qui est indenté d'un cran de trop. En le remontant d'un niveau la
vue retournera toujours une (http)réponse.
Bruno
Effectivement.
]]>2010/12/30 Franck Awounang N. <afranck64 _AT_ yahoo.fr>:
> 2)- Le "." c'est pour signaler que c'est à la page courante qu'il faut
> soumettre la requête. C'est un peu comme "dossier courant" avec les
> répertoires.
Ça marche bien avec Django quand les URLs se terminent par un "/".
Mais si la page est /search sans "/" à la fin, le fait de mettre "."
dans action enverra le formulaire sur / et non sur /search. Je pense
que c'est bien d'être explicite et de mettre l'URL complète dans
l'action, avec le tag {% url %} c'est assez facile.
> 3)- <label for="q">Search:</label>
> Le for moi non plus n'y comprends rien. Lorsque je le modifie ou
> l'enlève, je ne note pas différence j'en conclu donc qu'il doit être
> symbolique/décoratif.
Quand tu as un <label for="q"> et un <input id="q">, le fait de
cliquer sur le label mettra le focus sur l'input associé. Pratique
pour les champs de texte, c'est aussi utile pour les checkboxes /
boutons radio qui sont cochés / décochés quand on clique sur le label.
Django génère ça tout seul quand on fait un {{ form.as_p }} donc on ne
se rend pas compte de l'utilité
> 5)- Dans le bloc "if query" de ta vue/fonction "search", il n'y pas de
> return donc Python retourne None, qui n'est pas un objet HttpResponse ce
> qui lève une exception.
J'ai l'impression que c'est le "return" dans la dernière ligne de la
vue qui est indenté d'un cran de trop. En le remontant d'un niveau la
vue retournera toujours une (http)réponse.
Bruno
]]>2)- Le "." c'est pour signaler que c'est à la page courante qu'il faut soumettre la requête. C'est un peu comme "dossier courant" avec les répertoires.
3)- <label for="q">Search:</label>
Le for moi non plus n'y comprends rien. Lorsque je le modifie ou l'enlève, je ne note pas différence j'en conclu donc qu'il doit être symbolique/décoratif.
4)- Tout se passe dans le {% if query % }.
Lorsque la page est appelée sans paramètre "q", La requete ne modifie pas query qui vaut "" ce qui fait que l'on entre pas de le {% if query %} et donc on est mode lecture de données.
De même lorsque query existe, on modifie le titre de la page en "Search" + " Results".
5)- Dans le bloc "if query" de ta vue/fonction "search", il n'y pas de return donc Python retourne None, qui n'est pas un objet HttpResponse ce qui lève une exception.
6)-"from models import Book"
Ceci est en fait le moyen d'accéder à la base de données. Il y a une correspondance entre Book et la table books_Book de la base de données. Ceci permettra d'effectuer les recherche en fonction du nom du livre entré par l'utilisateur.
Bonne nuit, ++
]]>Je suis un peu perdu.
J'étudie actuellement les formulaires.
Voici le code de mon template :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Search {% if query %} Results {% endif %}</title>
</head>
<body>
<h1>Search</h1>
<form action="." method="get">
<label for="q">Search:</label>
<input type="text" name="q" value="{{ query|escape }}">
<input type="submit" value="Search">
</form>
{% if query %}
<h2>Results for "{{ query|escape }}":</h2>
{% if results %}
<ul>
{% for book in results %}
<li>{{ book|escape }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books found</p>
{% endif %}
{% endif %}
</body>
</html>
Plusieurs questions :
1) Je ne comprends pas du tout cette ligne de code
<title>Search {% if query %} Results {% endif %}</title>
.
Je me demande d'où vient ce Results
2) Dans le livre, l'auteur conseille de mettre "." pour l'action. Comment Django sait que c'est search qui doit être utilisé pour compléter le gabarit ?
Je ne comprends pas bien l'utilité de ce point.
3) je ne comprends pas du tout ce for
<label for="q">Search:</label>
4) Je ne comprends pas bien le fonctionnement de ce gabarit. Premièrement il affiche la zone de texte et le submit et ensuite le même gabarit affiche les résultats ?
5) lorsque j'appuie sur le submit, j'obtiens ce message d'erreur :
The view Temps.books.views.search didn't return an HttpResponse object.
Je renvoie pourtant un objet de type HttpResponse avec render_to_response.
Voici le code de ma vue :
# Create your views here.
from django.db.models import Q
from django.shortcuts import render_to_response
from models import Book
def search(request):
query = request.GET.get('q','')
if query:
qset = (
Q(title__icontains=query) |
Q(authors__first_name__icontains=query) |
Q(authors__last_name__icontains = query)
)
results = Book.objects.filter(qset).distinct()
else:
results= []
return render_to_response("inputs/search.html",{"results":results, "query":query})
6) je me demandais aussi à quoi correspondait "Book" ?
from models import Book
Merci d'avance pour votre aide.
beegees
]]>