English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Visões Genéricas do Django

Em alguns casos, escrever código de vista, como vimos anteriormente, pode ser realmente pesado. Imagine que você precisa apenas de uma página estática ou de uma página de lista. O Django também oferece uma maneira simples de configurar essas vistas simples, chamadas de vistas genéricas.

Diferentes das vistas tradicionais, uma vista geral é uma classe sem funções. O Django também oferece um conjunto de classes django.views.generic vistas genéricas, e cada vista comum é uma dessas classes ou herdada delas.

Existem10+Classes genéricas−

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
>>> import django.views.generic
 >>> dir(django.views.generic)
 ['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView', 
    'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView', 
    'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView', 
    'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__', 
    '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates', 
    'detail', 'edit', 'list'

Você pode usar vistas genéricas. Vamos ver alguns exemplos de como isso funciona.

Páginas estáticas

Vamos publicar a página estática a partir do modelo 'static.html'.

nosso static.html −

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
<html>
    <body> 
       This is a static page!!! 
    </body>
 </html>

Se assim fizéssemos, da maneira que aprendemos antes, teríamos que mudar o myapp/views.py −

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.shortcuts import render
 def static(request):
    return render(request, 'static.html', {})

myapp/urls.py será assim -

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

A melhor maneira é usar generics view. Para isso, nosso myapp/views.py se tornará -

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.views.generic import TemplateView
 class StaticView(TemplateView):
    template_name = "static.html"

Enquanto isso, nosso myapp/urls.py será assim -

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from myapp.views import StaticView
 from django.conf.urls import patterns
 urlpatterns = patterns("myapp.views", url(r'^static/, StaticView.as_view()),)     , StaticView.as_view()),)

ao acessar /myapp/static será -

Para obter o mesmo resultado, também podemos, executar as seguintes operações -

Não é necessário modificar o arquivo views.py        Altere o arquivo url.py para -    

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.views.generic import TemplateView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^static/', TemplateView.as_view(template_name = 'static.html')),)

Como você pode ver, é necessário apenas alterar o segundo método do arquivo url.py.

Listando e exibindo dados do banco de dados

Precisamos listar todos os itens no modelo Dreamreal. Dessa forma, a classe generics view ListView torna-se fácil de usar. Edite o arquivo url.py e atualize-o -

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns(
    "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal, 
       template_name = "dreamreal_list.html")),
 )

É importante notar que, neste ponto, a variável é transmitida do generics view para o template object_list. Se você quiser seu próprio nome, precisará adicionar um parâmetro context_object_name ao método as_view. Em seguida, o url.py se torna -

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
from django.views.generic import ListView
 from django.conf.urls import patterns, url
 urlpatterns = patterns("myapp.views",
    url(r'^dreamreals/', ListView.as_view(
       template_name = "dreamreal_list.html")),
       model = Dreamreal, context_object_name = "dreamreals_objects",)

Então o template associado se tornará −

# Nome do Arquivo: example.py
# Copyright: 2020 Por w3codebox
# Autor por: pt.oldtoolbag.com
# Data: 2020-08-08
{% extends "main_template.html" %}
 {% block content %}
 Dreamreals:<p>
 {% for dr in object_list %}
 {{dr.name}}</p>
 {% endfor %}
 {% endblock %}

Acessar /myapp/dreamreals/ Será gerada a seguinte página −