Django DetalheView

Resumo : neste tutorial, você aprenderá como usar a DetailViewclasse Django para exibir um objeto.

Este tutorial começa onde o  tutorial Django ListView parou.

Definindo um DetailView

O Django DetailViewpermite definir uma visão baseada em classe que exibe os detalhes de um objeto. Para usar a DetailViewclasse, você define uma classe que herda da DetailViewclasse.

Por exemplo, o seguinte define a TaskDetailvisualização baseada em classe que exibe os detalhes de uma tarefa do aplicativo Todo :

from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from .models import Task

    
class TaskDetail(DetailView):
    model = Task
    context_object_name = 'task'
    
#...  Linguagem de código:  Python  ( python )

Como funciona.

Primeiro, importe o DetailViewarquivo django.views. generic.detail:

from django.views.generic.detail import DetailViewLinguagem de código:  Python  ( python )

Segundo, defina uma TaskDetailclasse que herde da DetailViewclasse. Na TaskDetailclasse, definimos os seguintes atributos:

  • modelespecifica a classe do objeto que será exibido.
  • context_object_nameespecifica o nome do objeto no modelo. Por padrão, o Django usa objectcomo nome do objeto no modelo. Para tornar isso mais óbvio, usamos the taskcomo nome do objeto.

Por padrão, a TaskDetailclasse carregará o template com o nome task_detail.htmlda templates/todoaplicação.

Se quiser usar um nome de modelo diferente, você pode usar o template_nameatributo na TaskDetailclasse.

Crie o modelo task_detail.html

Crie o task_detail.htmlmodelo no templates/blogdiretório com o seguinte código:

{%extends 'base.html'%}

{%block content%}

 <article class="task">
	<header>
		<h2>{{ task.title }}</h2>
		<span class="badge {% if task.completed %}badge-completed{% else %}badge-pending{%endif%}">
			{% if task.completed %} Completed {%else%} Pending {%endif%}
		</span>
	</header>
	<p>{{task.description}}</p>
</article>

{%endblock content%}Linguagem de código:  HTML, XML  ( xml )

O task_detail.htmlmodelo estende base.htmlo modelo.

O task_detail.htmlmodelo usa taskcomo objeto e exibe os atributos da tarefa, incluindo título, status (concluído ou não) e descrição.

Definindo uma rota

Defina uma rota que mapeie a URL que exibe uma tarefa com o resultado do as_view()método da TaskDetailclasse:

from django.urls import path
from .views import home, TaskList, TaskDetail

urlpatterns = [
    path('', home, name='home'),
    path('tasks/', TaskList.as_view(),name='tasks'),
    path('task/<int:pk>/',TaskDetail.as_view(),name='task'),
]Linguagem de código:  Python  ( python )

A URL aceita um número inteiro como o id (ou chave primária, pk) da tarefa. O TaskDetail pegará esse pkparâmetro, selecionará a tarefa do banco de dados pelo id, construirá um objeto Task e o passará para um modelo.

Modificando o modelo task_list.html

Modifique o task_list.htmlmodelo para incluir o link para cada tarefa na lista de tarefas usando a urltag:

{%extends 'base.html'%}

{%block content%}

<div class="center">
	<h2>My Todo List</h2>
	{% if tasks %}
	<ul class="tasks">
		{% for task in tasks %}
			<li><a href="{% url 'task' task.id %}" class="{% if task.completed%}completed{%endif%}">{{ task.title }}</a> 
				 <div  class="task-controls">
				 	<a href="#"><i class="bi bi-trash"></i> </a>
					<a href="#"><i class="bi bi-pencil-square"></i></a>
		         </div>
		    </li>
		{% endfor %}
	{% else %}
		<p>🎉 Yay, you have no pending tasks!</p>
	{% endif %}
	</ul>
</div>
{%endblock content%}
Linguagem de código:  HTML, XML  ( xml )

Ao clicar no link de cada tag, você será redirecionado para a página de detalhes da tarefa.

Execute o servidor de desenvolvimento Django:

python manage.py runserverLinguagem de código:  texto simples  ( texto simples )

e abra a lista de tarefas:

http://127.0.0.1:8000/tasks/Linguagem de código:  texto simples  ( texto simples )

você verá a seguinte lista de tarefas:

E clique em uma tarefa, por exemplo, Learn Python, você será redirecionado para a página de detalhes da tarefa:

Você pode baixar o código final deste tutorial do Django DetailView aqui.

Resumo

  • Use Django DetailViewpara exibir os detalhes de um objeto.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *