Integra la funzione di ricerca nella tua applicazione Django utilizzando questa guida passo-passo.
L'aggiunta di una funzione di ricerca alla tua applicazione Web consente agli utenti di navigarla facilmente cercando ciò che desiderano. Django fornisce supporto integrato per la creazione di una funzione di ricerca utilizzando i suoi potenti strumenti ORM e query. Con Django puoi implementare diversi tipi di ricerche, incluse ricerche per parole chiave, ricerche semplici e ricerche avanzate con filtri.
Implementazione della funzionalità di ricerca in Django
Django ti consente di implementare diversi tipi di ricerche con i suoi metodi e funzioni integrati. Puoi implementare una semplice ricerca per parole chiave o una ricerca avanzata in base al tuo caso d'uso. Dovresti implementare una ricerca avanzata se hai un'applicazione complessa, come un sito di e-commerce, mentre una semplice ricerca per parole chiave è adatta a progetti meno complessi.
Il codice utilizzato in questo articolo può essere trovato su Git Hub ed è gratuito per l'uso con la licenza MIT.
Implementa una semplice ricerca per parole chiave in Django
Per creare una semplice funzione di ricerca, dovresti iniziare costruendo la tua barra di ricerca. Puoi costruire la tua barra di ricerca nella tua barra di navigazione. Bootstrap fornisce una barra di navigazione già pronta con una barra di ricerca e puoi facilmente integra Bootstrap e i suoi componenti nel tuo progetto Django. Crea la tua barra di ricerca in un file HTML, imposta il metodo del modulo su INVIARE, e dare il campo di input a nome attributo come questo:
<moduloclasse="d-flex"ruolo="ricerca"metodo="INVIARE">
{% csrf_token %}
<ingresso
class="form-control me-NN"
tipo="cerca"
placeholder="Cerca"
nome="query_ricerca"
obbligatorio aria-label="Cerca"
>
<pulsanteclasse="btn btn-contorno-successo"tipo="invia">Ricercapulsante>
modulo>
Nel codice precedente, il nome del campo di input è query di ricerca. Il modulo si avvale di Token CSRF di Django A prevenire gli attacchi CSRF. Per far funzionare la barra di ricerca, segui questi passaggi.
Crea una vista per la ricerca
- Apri i tuoi viste.py file e importare il modello dal file modelli.py file:
da .Modelli importare Nome del modello
- Crea una funzione di visualizzazione per la funzione di ricerca:
defsearch_feature(richiesta):
# Controlla se la richiesta è una richiesta di post.
Se richiesta.metodo == 'INVIARE':
# Recupera la query di ricerca inserita dall'utente
search_query = richiesta. INVIARE['query di ricerca']
# Filtra il tuo modello in base alla query di ricerca
post = Model.objects.filter (fieldName__contains=search_query)
ritorno rendere (richiesta, 'app/nome_modello.html', {'domanda':query di ricerca, 'post':post})
altro:
ritorno rendere (richiesta, 'app/nome_modello.html',{})
La funzione sopra controlla prima se il client sta inviando un file INVIARE richiesta. Se il controllo viene superato, va avanti per recuperare il valore della query di ricerca dell'utente in questo modo:
search_query = richiesta. INVIARE['query di ricerca']
A richiesta. POST['search_query'], 'query di ricerca' dovrebbe essere sostituito con il nome del campo di immissione della barra di ricerca.
Dopo aver recuperato il valore della query di ricerca dell'utente, la funzione filtra il modello con esso utilizzando il __contiene metodo. IL __contiene metodo non fa distinzione tra maiuscole e minuscole. Per utilizzare questo metodo, devi seguire questo formato:
nomecampo__contiene
Ad esempio, se desideri che i tuoi utenti eseguano la ricerca in base a un campo modello denominato nome, dovresti modificare il tuo codice in modo che assomigli a questo:
name__contains=query_di_ricerca
Infine, la funzione esegue il rendering di un modello e passa la query di ricerca e il modello filtrato come contesto.
Tuttavia, se il metodo del form non è a INVIARE richiesta, la funzione esegue il rendering di un modello con un dizionario vuoto e non elabora la query di ricerca.
Creare un modello per il risultato della ricerca
- Crea un file HTML per restituire i risultati della ricerca al lato client.
- Visualizza il risultato della ricerca sulla pagina affinché l'utente possa visualizzarlo. Il codice nel tuo file HTML dovrebbe essere simile a questo:
{% se query %}
<div>
<div>
scorrere la query di ricerca
{% per post nei post %}
<div>
restituire la query di ricerca
<P>{{titolo del post}}P>
div>
{% fine per %}
div>
div>
{% altro %}
restituire un messaggio se l'utente non inserisce una query di ricerca
<h1>Inserisci una query di ricercah1>
{% finisci se %}
Il modello HTML sopra controlla se l'utente inserisce una query di ricerca nella barra di ricerca. Se l'utente immette una query di ricerca, a per ciclo passa sui risultati della ricerca e li restituisce all'utente. Quando non è presente alcuna query di ricerca, viene visualizzato un messaggio che richiede all'utente di immettere una query di ricerca. Un caso in cui potrebbe non esserci alcuna query di ricerca è se l'utente accede direttamente all'URL senza compilare la barra di ricerca, ovvero l'utente inserisce un URL come miositoweb.com/ricerca direttamente nel browser. Dovresti assicurarti di usare Ereditarietà del modello di Django nel tuo file HTML.
- Modifica il tuo codice HTML per restituire un messaggio di errore se non ci sono risultati di ricerca.
{% se query %}
<div>
<div>
controlla se c'è un risultato nel database
{% se pubblica %}
scorrere la query di ricerca se c'è un risultato
{% per post nei post %}
<div>
restituire la query di ricerca
<P>{{titolo del post}}P>
div>
{% fine per %}
restituire un messaggio se non vengono trovati risultati.
{% altro %}
<h3>Nessun risultato di ricerca trovatoh3>
{% finisci se %}
div>
div>
{% altro %}
<h1>Inserisci una query di ricercah1>
{% finisci se %}
Il nuovo modello HTML consente una migliore esperienza utente. Introduce un'istruzione condizionale per verificare se un risultato di ricerca è disponibile nel database. Se c'è, visualizza il risultato della ricerca; in caso contrario, invia all'utente un messaggio di errore.
Configura i tuoi pattern URL
- Se non lo hai fatto, crea un file URL.py file nella directory dell'app.
- Nel tuo URL.py, file crea un pattern URL per la tua pagina di ricerca:
da django.urls importare sentiero
da. importare visualizzazioni
schemi URL = [
sentiero('ricerca/', views.search_feature, name='ricerca-vista'),
]
Il programma sopra importa prima il file sentiero funzione e il visualizzazioni file relativo all'app. Quindi crea un percorso denominato vista di ricerca per la pagina di ricerca.
- Aggiungi un'azione del modulo alla barra di ricerca. L'URL dell'azione deve puntare al percorso dell'URL dedicato alla visualizzazione di ricerca. In questo caso, il modulo punta a vista di ricerca.
<moduloclasse="d-flex"ruolo="ricerca"metodo="INVIARE"azione="{% url 'search-view' %}">
<ingresso
class="form-control me-NN"
tipo="cerca"
placeholder="Cerca qualcosa"
nome="query_ricerca"
obbligatorio aria-label="Cerca"
>
<pulsanteclasse="btn btn-contorno-successo"tipo="invia">Ricercapulsante>
modulo>
Senza un'azione del modulo che punta al percorso dell'URL di ricerca, la funzione di ricerca non funzionerà. Ricorda che il percorso dell'URL di ricerca deve puntare alla vista Django che gestisce la logica della tua funzione di ricerca.
Creare una funzione di ricerca per più campi del modello
Se desideri migliorare l'esperienza utente della tua app Web, puoi consentire agli utenti di eseguire ricerche in più di un campo nel modello. Ad esempio, in un'app per blog, potresti volere che il tuo utente esegua la ricerca in base ai titoli dei post o ai nomi degli autori.
Per implementare questa funzione, dovresti usare il file Q oggetto fornito da Django. Dovresti importare il file Q oggetto nel tuo viste.py file come questo:
da django.db.models importare Q
Dopo l'importazione Q, dovresti modificare la tua funzione di visualizzazione in questo modo:
defsearch_post(richiesta):
Se richiesta.metodo == 'INVIARE':
search_query = richiesta. INVIARE['query di ricerca']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
ritorno rendere (richiesta, 'app/nome_modello.html', {'domanda':query di ricerca, 'post':post})
altro:
ritorno rendere (richiesta, 'app/nome_modello.html',{})
Nel programma sopra, il post variabile filtra il modello in base al titolo del post o al nome dell'autore. La funzione utilizza il O operatore, in questo caso un simbolo pipe, per eseguire il filtro.
Migliorare l'esperienza utente con una funzione di ricerca
Una funzione di ricerca nella tua applicazione web migliora efficacemente la sua esperienza utente e l'usabilità complessiva. Con Django, devi solo sfruttare le funzionalità integrate per far funzionare la tua funzione di ricerca, offrendo vantaggi significativi a te e ai tuoi utenti.