Naszym celem będzie zrobienie prostej wyszukiwarki google w Django.
- Pobieramy plik
web_search.py.
- Tworzymy nowy projekt django o nazwie "google":
django-admin.py startproject google
- Tworzymy nową aplikacje o nazwie "searchengine":
python manage.py startapp searchengine
- Plik
web_search.py umieszczamy w katalogu
searchengine
- Tworzymy w głównym katalogu projektu katalog
templates
- Edytujemy
settings.py i TEMPLATES_DIR ustawiamy na:
TEMPLATE_DIRS = (
'templates/'
)
- Uruchamiamy serwer testowy:
python manage.py runserver 8080
Mamy przygotowane Django pod naszą wyszukiwarkę, tzn możemy zabrać się za widok i szablon. W katalogu
templates/ tworzymy plik
search.html o kodzie:
<form action="/" method="post">
<input type="text" name="term" size="30"> <input type="submit" value="Search">
</form>
Zwykły kod formularza wysyłającego dane na stronę główną.
- Edytujemy
searchengine/views.py do postaci:
from django.shortcuts import render_to_response
from django.http import Http404, HttpResponse, HttpResponseRedirect
def search(request):
if request.POST:
print request.POST['term']
return HttpResponseRedirect("/")
else:
return render_to_response('search.html')
Mamy tutaj prosty widok search. Podłączamy go edytując
urls.py do postaci:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^/?$', 'google.searchengine.views.search'),
)
Obecnie po wejściu na główną stronę zobaczymy formularz. Gdy coś wpiszemy i wyślemy - zostaniemy przekierowani na stronę główną (HttpResponseRedirect) a w konsoli w której mamy uruchomiony serwer zobaczymy podaną przez nas frazę.
web_search.py działa bardzo prosto, oto przykład:
from web_search import google
for (name, url, desc) in google('fraza', 20):
print name, url
Musimy wykorzystać frazę i przekazać wynik do szablonu.
Widok modyfikujemy do postaci:
from django.shortcuts import render_to_response
from django.http import Http404, HttpResponse, HttpResponseRedirect
from google.searchengine.web_search import google
def search(request):
if request.POST:
return render_to_response('search.html', {'result': google(request.POST['term'], 10)})
#return HttpResponseRedirect("/")
else:
return render_to_response('search.html')
Dodaliśmy ładowanie web_search (from Projekt.Aplikacja.web_search import google) oraz zamiast przekierowania wysłamy szablon
search.html ze zmienną
result zawierającą wyniki wyszukiwania. Szablon modyfikujemy do postaci:
<form action="/" method="post">
<input type="text" name="term" size="30"> <input type="submit" value="Search">
</form><hr>
{% if result %}
{% for res in result %}
<li>{{ res }}</li>
{% endfor %}
{% endif %}
Mamy tag
if zmienna, który zostanie spełniony jeżeli zmienna będzie istniała (tj. w naszym przypadku jeżeli formularz został wysłany i mamy wyniki z google). Następnie mamy
for, który listuje wyniki. Po wpisaniu jakiejś frazy zobaczymy wyniki ale w postaci listy:
('Wine Development HQ', 'http://www.winehq.com/', 'Wine is a free implementation of Windows on Unix. WineHQ is a collection of resources for Wine developers and users.')
Element 0 - nazwa strony, element 1 - URL strony, element 2 - opis strony. A więc zmieniamy pętlę
for na:
{% for res in result %}
<a href="{{ res.1 }}"><b>{{ res.0 }}</b></a><br />
{{ res.2 }}<br /><br />
{% endfor %}
I gotowe
- Dodane: 14.07.2008 przez riklaunim