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