Integre o recurso de pesquisa em seu aplicativo Django usando este guia passo a passo.
Adicionar um recurso de pesquisa ao seu aplicativo da web permite que seus usuários naveguem facilmente pesquisando o que desejam. O Django fornece suporte embutido para construir um recurso de pesquisa usando seu poderoso ORM e ferramentas de consulta. Com o Django, você pode implementar diferentes tipos de pesquisas, incluindo pesquisas por palavras-chave, pesquisas simples e pesquisas avançadas com filtros.
Implementando a funcionalidade de pesquisa no Django
O Django permite que você implemente diferentes tipos de pesquisas com seus métodos e funções integrados. Você pode implementar uma pesquisa de palavra-chave simples ou uma pesquisa avançada com base no seu caso de uso. Você deve implementar uma pesquisa avançada se tiver um aplicativo complexo, como um site de comércio eletrônico, enquanto uma pesquisa simples por palavra-chave é adequada para projetos menos complexos.
O código usado neste artigo pode ser encontrado em GitHub e é gratuito para você usar sob a licença do MIT.
Implemente uma pesquisa de palavras-chave simples no Django
Para criar um recurso de pesquisa simples, você deve começar criando sua barra de pesquisa. Você pode criar sua barra de pesquisa em sua barra de navegação. Bootstrap fornece uma barra de navegação pronta com uma barra de pesquisa e você pode facilmente integrar Bootstrap e seus componentes em seu projeto Django. Crie sua barra de pesquisa em um arquivo HTML, defina o método de formulário para PUBLICAR, e dê ao campo de entrada um nome atributo assim:
<formaaula="d-flex"papel="procurar"método="PUBLICAR">
{% csrf_token %}
<entrada
class="form-control me-NN"
digite="pesquisar"
espaço reservado="Pesquisar"
nome="pesquisa_consulta"
obrigatório aria-label="Pesquisar"
>
<botãoaula="btn btn-contorno-sucesso"tipo="enviar">Procurarbotão>
forma>
No código acima, o nome do campo de entrada é consulta de pesquisa. O formulário utiliza Token CSRF do Django para evitar ataques CSRF. Para fazer sua barra de pesquisa funcionar, siga estas etapas.
Criar uma visualização para a pesquisa
- Abre o teu views.py arquivo e importe seu modelo do modelos.py arquivo:
de .modelos importar ModelName
- Crie uma função de visualização para o recurso de pesquisa:
defpesquisa_recurso(solicitar):
# Verifique se a solicitação é uma solicitação de postagem.
se request.método == 'PUBLICAR':
# Recupere a consulta de pesquisa inserida pelo usuário
pesquisa_consulta = solicitação. PUBLICAR['consulta de pesquisa']
# Filtre seu modelo pela consulta de pesquisa
posts = Model.objects.filter (fieldName__contains=search_query)
retornar renderizar (solicitação, 'aplicativo/nome_modelo.html', {'consulta':consulta de pesquisa, 'Postagens':Postagens})
outro:
retornar renderizar (solicitação, 'aplicativo/nome_modelo.html',{})
A função acima primeiro verifica se o cliente está enviando um PUBLICAR solicitar. Se a verificação for aprovada, ela recuperará o valor da consulta de pesquisa do usuário da seguinte forma:
pesquisa_consulta = solicitação. PUBLICAR['consulta de pesquisa']
A pedido. POST['busca_consulta'], 'consulta de pesquisa' deve ser substituído pelo nome do campo de entrada da sua barra de pesquisa.
Depois de recuperar o valor da consulta de pesquisa do usuário, a função filtra o modelo com ele usando o __contém método. O __contém O método não diferencia maiúsculas de minúsculas. Para usar este método, você deve seguir este formato:
fieldName__contains
Por exemplo, se você deseja que seus usuários pesquisem com base em um campo de modelo chamado nome, você deve modificar seu código para ficar assim:
name__contains=search_query
Por fim, a função renderiza um modelo e passa a consulta de pesquisa e o modelo filtrado como contexto.
No entanto, se o método do formulário não for um PUBLICAR request, a função renderiza um modelo com um dicionário vazio e não processa a consulta de pesquisa.
Crie um modelo para o resultado da pesquisa
- Crie um arquivo HTML para retornar os resultados da pesquisa para o lado do cliente.
- Emita o resultado da pesquisa na página para o usuário ver. O código no seu arquivo HTML deve ficar assim:
{% se consultar %}
<div>
<div>
percorrer a consulta de pesquisa
{% para postagem em postagens %}
<div>
consulta de pesquisa de retorno
<p>{{post.title}}p>
div>
{% endfor %}
div>
div>
{% outro %}
retornar uma mensagem se o usuário não inserir uma consulta de pesquisa
<h1>Insira uma consulta de pesquisah1>
{% fim se %}
O modelo HTML acima verifica se o usuário insere uma consulta de pesquisa na barra de pesquisa. Se o usuário inserir uma consulta de pesquisa, um para loop percorre os resultados da pesquisa e os retorna ao usuário. Quando não há consulta de pesquisa, uma mensagem é exibida para o usuário inserir uma consulta de pesquisa. Um caso em que pode não haver consulta de pesquisa é se o usuário for diretamente para o URL sem preencher a barra de pesquisa, ou seja, o usuário inserir um URL como mywebsite.com/search diretamente no navegador. Você deve garantir que usa Herança de modelo do Django em seu arquivo HTML.
- Modifique seu código HTML para retornar uma mensagem de erro se não houver resultado de pesquisa.
{% se consultar %}
<div>
<div>
verifique se há um resultado no banco de dados
{% se postar %}
percorrer a consulta de pesquisa se houver um resultado
{% para postagem em postagens %}
<div>
consulta de pesquisa de retorno
<p>{{post.title}}p>
div>
{% endfor %}
retorna uma mensagem se não houver resultados encontrados.
{% outro %}
<h3>Nenhum resultado de pesquisa encontradoh3>
{% fim se %}
div>
div>
{% outro %}
<h1>Insira uma consulta de pesquisah1>
{% fim se %}
O novo modelo HTML permite uma melhor experiência do usuário. Ele apresenta uma instrução condicional para verificar se um resultado de pesquisa está disponível no banco de dados. Se houver, exibe o resultado da pesquisa; caso contrário, enviará ao usuário uma mensagem de erro.
Configurar seus padrões de URL
- Se você ainda não fez isso, crie um urls.py arquivo no diretório do seu aplicativo.
- Na tua urls.py, arquivo crie um padrão de URL para sua página de pesquisa:
de django.urls importar caminho
de. importar Visualizações
urlpadrões = [
caminho('procurar/', views.search_feature, nome='visualização de pesquisa'),
]
O programa acima primeiro importa o caminho função e o Visualizações arquivo relacionado ao aplicativo. Em seguida, ele cria um caminho chamado visualização de pesquisa para a página de pesquisa.
- Adicione uma ação de formulário à sua barra de pesquisa. A URL de ação deve apontar para o caminho da URL dedicado à exibição de pesquisa. Neste caso, o formulário aponta para visualização de pesquisa.
<formaaula="d-flex"papel="procurar"método="PUBLICAR"Ação="{% url 'exibição de pesquisa' %}">
<entrada
class="form-control me-NN"
digite="pesquisar"
placeholder="Pesquisar algo"
nome="pesquisa_consulta"
obrigatório aria-label="Pesquisar"
>
<botãoaula="btn btn-contorno-sucesso"tipo="enviar">Procurarbotão>
forma>
Sem uma ação de formulário apontando para o caminho do URL de pesquisa, o recurso de pesquisa não funcionará. Lembre-se de que seu caminho de URL de pesquisa deve apontar para a visualização Django que lida com a lógica de seu recurso de pesquisa.
Crie um recurso de pesquisa para vários campos de modelo
Se você deseja melhorar a experiência do usuário em seu aplicativo da web, pode permitir que seus usuários pesquisem por mais de um campo em seu modelo. Por exemplo, em um aplicativo de blog, você pode querer que seu usuário pesquise com base em títulos de postagens ou nomes de autores.
Para implementar esse recurso, você deve usar o Q objeto fornecido pelo Django. Você deve importar o Q objeto em seu views.py arquivo assim:
de django.db.models importar Q
Depois de importar Q, você deve modificar sua função de exibição assim:
defsearch_post(solicitar):
se request.método == 'PUBLICAR':
pesquisa_consulta = solicitação. PUBLICAR['consulta de pesquisa']
posts = Post.objects.filter (Q(title__icontains=search_query) | Q(author__icontains=search_query))
retornar renderizar (solicitação, 'aplicativo/nome_modelo.html', {'consulta':consulta de pesquisa, 'Postagens':Postagens})
outro:
retornar renderizar (solicitação, 'aplicativo/nome_modelo.html',{})
No programa acima, o Postagens A variável filtra o modelo pelo título do post ou pelo nome do autor. A função usa o OU operador—neste caso, um símbolo de barra vertical—para executar o filtro.
Melhorando a experiência do usuário com um recurso de pesquisa
Um recurso de pesquisa em seu aplicativo da Web melhora efetivamente a experiência do usuário e a usabilidade geral. Com o Django, você só precisa aproveitar as funcionalidades incorporadas para fazer seu recurso de pesquisa funcionar, fornecendo benefícios significativos para você e seus usuários.