{"id":573267,"date":"2025-06-05T04:29:31","date_gmt":"2025-06-05T03:29:31","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=573267"},"modified":"2025-06-05T04:50:21","modified_gmt":"2025-06-05T03:50:21","slug":"o-guia-definitivo-dos-templates-do-django","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/pt-br\/pycharm\/2025\/06\/o-guia-definitivo-dos-templates-do-django\/","title":{"rendered":"O guia definitivo dos templates do Django"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-573273 size-full\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/06\/PC-social-BlogFeatured-1280x720-2x-8.png\" alt=\"\" width=\"2559\" height=\"1439\" \/><\/figure>\n<p>Os templates do Django s\u00e3o uma parte crucial desse framework. Compreender o que s\u00e3o e por que s\u00e3o \u00fateis pode ajudar voc\u00ea a criar templates consistentes, adapt\u00e1veis e funcionais para os seus sites e aplicativos em <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\">Django<\/a>.<\/p>\n<p>Se voc\u00ea for novato nesse framework e estiver procurando configurar o seu primeiro <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/creating-and-running-your-first-django-project.html\" target=\"_blank\" rel=\"noopener\">projeto no Django<\/a>, \u00e9 vital dominar os templates. Neste guia, voc\u00ea encontrar\u00e1 tudo que precisa saber sobre os templates do Django, incluindo seus diferentes tipos e como us\u00e1-los.<\/p>\n<h2 class=\"wp-block-heading\">O que s\u00e3o templates no Django?<\/h2>\n<p>Os <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">templates<\/a> s\u00e3o uma parte fundamental do framework Django. Eles permitem que voc\u00ea separe a apresenta\u00e7\u00e3o visual do seu site do c\u00f3digo subjacente. Um template cont\u00e9m as partes est\u00e1ticas da sa\u00edda desejada em HTML, al\u00e9m de uma sintaxe especial que descreve como ser\u00e1 inclu\u00eddo o conte\u00fado din\u00e2mico.\u00a0<\/p>\n<p>Em \u00faltima inst\u00e2ncia, os templates podem gerar p\u00e1ginas completas de Web, enquanto as <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\">visualiza\u00e7\u00f5es<\/a> e <a href=\"https:\/\/docs.djangoproject.com\/en\/5.1\/topics\/db\/models\/\" target=\"_blank\" rel=\"noopener\">modelos<\/a> cuidam das consultas a bancos de dados e outras tarefas de processamento de dados. Essa separa\u00e7\u00e3o garante um c\u00f3digo limpo e f\u00e1cil de manter, ao separar a l\u00f3gica de neg\u00f3cios em HTML do c\u00f3digo em Python no resto do seu projeto do Django. Sem os templates, voc\u00ea precisaria incluir o c\u00f3digo em HTML diretamente dentro do seu c\u00f3digo em Python, que ficaria dif\u00edcil de ler e depurar.<\/p>\n<p><iframe loading=\"lazy\" title=\"Django Templates in 3 Minutes: A Quick Guide to Template Creation\" src=\"https:\/\/www.youtube.com\/embed\/EfSGuO4tVu4\" width=\"840\" height=\"473\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Veja um exemplo de um template do Django contendo algum c\u00f3digo em HTML, uma vari\u00e1vel <code>name<\/code> e alguma l\u00f3gica b\u00e1sica de <code>if\/else<\/code>:<\/p>\n<h1>Welcome!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% if name %}<\/pre>\n<h1>Hello, {{ name }}!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% else %}<\/pre>\n<h1>Hello, Guest!<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% endif %}<\/pre>\n<h1>{{ heading }}<\/h1>\n<h3 class=\"wp-block-heading\">Benef\u00edcios do uso de templates<\/h3>\n<p>Os desenvolvedores usam templates do Django para ajud\u00e1-los a criarem aplicativos confi\u00e1veis de forma r\u00e1pida e eficiente. Outros benef\u00edcios importantes dos templates incluem:<\/p>\n<ul>\n<li><strong>C\u00f3digo reutiliz\u00e1vel<\/strong>: Pode-se criar componentes e layouts reutiliz\u00e1veis para manter a consist\u00eancia entre p\u00e1ginas e aplicativos.<\/li>\n<li><strong>Manuten\u00e7\u00e3o mais f\u00e1cil<\/strong>: A apar\u00eancia das p\u00e1ginas Web pode ser modificada sem alterar a l\u00f3gica subjacente.<\/li>\n<li><strong>Melhor legibilidade<\/strong>: Pode-se manter o c\u00f3digo em HTML limpo e compreens\u00edvel, sem necessidade de uma l\u00f3gica complexa.<\/li>\n<li><strong>Heran\u00e7a de templates<\/strong>: Pode-se definir estruturas e layouts comuns para reduzir a duplica\u00e7\u00e3o e promover a consist\u00eancia.<\/li>\n<li><strong>Conte\u00fado din\u00e2mico<\/strong>: \u00c9 poss\u00edvel criar p\u00e1ginas Web personalizadas que se adaptam aos dados de entrada do usu\u00e1rio e a varia\u00e7\u00f5es nos dados.<\/li>\n<li><strong>Otimiza\u00e7\u00e3o de desempenho<\/strong>: Os templates podem ser colocadas em cache para melhorar o desempenho do aplicativo ou Web site.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Desafios e limita\u00e7\u00f5es<\/h3>\n<p>Embora os templates sejam essenciais para renderizar p\u00e1ginas Web no Django, eles devem ser usados com crit\u00e9rio, especialmente em projetos complexos com conjuntos de dados maiores. Apesar da relativa simplicidade da linguagem de templates do Django, templates complexos demais, com in\u00fameras tags aninhadas, filtros e heran\u00e7as, podem ficar dif\u00edceis de gerenciar e manter. Em vez de incorporar um excesso de l\u00f3gica aos seus templates, procure manter o foco deles na apresenta\u00e7\u00e3o. As op\u00e7\u00f5es de personaliza\u00e7\u00e3o tamb\u00e9m s\u00e3o limitadas, a menos que voc\u00ea crie os seus pr\u00f3prios filtros e tags personalizados.<\/p>\n<p>Migrar para um outro mecanismo de templates pode ser um desafio, pois o mecanismo-padr\u00e3o do Django \u00e9 intimamente ligado ao <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\">framework<\/a>. Por\u00e9m, mudar para uma alternativa como o Jinja \u00e9 relativamente simples e discutiremos essa possibilidade mais adiante neste guia.<\/p>\n<h3 class=\"wp-block-heading\">Depura\u00e7\u00e3o de templates do Django<\/h3>\n<p>Em algumas situa\u00e7\u00f5es, como quando aparecem problemas, pode ser \u00fatil ver como funciona o seu template. Para isso, voc\u00ea pode usar a depura\u00e7\u00e3o de templates.<\/p>\n<p>A depura\u00e7\u00e3o de templates concentra-se em identificar erros na forma como o c\u00f3digo em HTML e os dados din\u00e2micos interagem. Alguns problemas comuns s\u00e3o vari\u00e1veis faltando, tags incorretas no template e erros de l\u00f3gica.<\/p>\n<p>Por sorte, o Django oferece ferramentas \u00fateis como a <code>{{ debug }}<\/code> para inspecionar os seus templates, al\u00e9m de p\u00e1ginas de erro detalhadas que apontam onde est\u00e1 o problema. Isso facilita identificar e resolver problemas, garantindo que os seus templates sejam renderizados conforme o esperado.<\/p>\n<h2 class=\"wp-block-heading\">Compreendendo a linguagem de templates do Django (Django Template Language \u2014 DTL)<\/h2>\n<p>A linguagem de templates do Django (Django Template Language \u2014 DTL) \u00e9 o mecanismo de templates do framework, projetada para simplificar a cria\u00e7\u00e3o de p\u00e1ginas Web din\u00e2micas. Ela associa de forma transparente o c\u00f3digo em HTML a tags e filtros espec\u00edficos do Django, permitindo que voc\u00ea gere conte\u00fado rico e orientado por dados diretamente a partir do seu <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/04\/create-a-django-app-in-pycharm\/\">aplicativo Django<\/a>. Vamos explorar alguns dos principais recursos que tornam a DTL uma ferramenta poderosa para criar templates.<\/p>\n<h3 class=\"wp-block-heading\">Sintaxe e estrutura b\u00e1sicas da DTL<\/h3>\n<p>Os templates do Django s\u00e3o escritos em uma combina\u00e7\u00e3o das sintaxes de HTML e DTL. A estrutura b\u00e1sica de um template do Django consiste de marca\u00e7\u00e3o de HTML com tags e vari\u00e1veis do Django embutidas nela.<\/p>\n<p>Veja um exemplo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  \n    <\/pre>\n<h1>{{ heading }}<\/h1>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>{% for item in item_list %}\n<li>{{ item.name }}<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>{% endfor %}<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  \n<\/pre>\n<h3 class=\"wp-block-heading\">Vari\u00e1veis, filtros e tags<\/h3>\n<p>A DTL tem v\u00e1rios recursos para trabalhar com vari\u00e1veis, filtros e tags:<\/p>\n<ul>\n<li><strong>Vari\u00e1veis<\/strong>: As vari\u00e1veis exibem dados din\u00e2micos nos seus templates. Elas ficam entre chaves duplas, como por exemplo <code>{{ variable_name }}<\/code>.<\/li>\n<li><strong>Filtros<\/strong>: Os filtros modificam ou formatam o valor de uma vari\u00e1vel antes de renderiz\u00e1-la. Eles s\u00e3o aplicados usando uma barra vertical ( | ); por exemplo, <code>{{ variable_name|upper }}<\/code>.<\/li>\n<li><strong>Tags<\/strong>: As tags controlam a l\u00f3gica e o fluxo dos seus templates. Elas ficam dentro de blocos <code>{% %}<\/code> e podem efetuar v\u00e1rias opera\u00e7\u00f5es, como loops, condi\u00e7\u00f5es e inclus\u00f5es de templates.<\/li>\n<\/ul>\n<p>O <a href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\">PyCharm<\/a>, um IDE profissional para o desenvolvimento com o Django, simplifica o trabalho com templates do Django, fornecendo realce de sintaxe, que aplica padr\u00f5es de cores a tags, vari\u00e1veis e c\u00f3digo em HTML para melhor legibilidade. Ele tamb\u00e9m oferece detec\u00e7\u00e3o de erros em tempo real, garantindo que voc\u00ea n\u00e3o deixe de fechar tags, nem use a sintaxe incorreta. Com complementa\u00e7\u00e3o autom\u00e1tica de vari\u00e1veis e tags, voc\u00ea pode programar mais rapidamente e com menos erros.<\/p>\n<figure class=\"wp-block-video\"><video src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/1.mov\" controls=\"controls\" width=\"300\" height=\"150\"><\/video><\/figure>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Comece a usar o PyCharm Pro gratuitamente<\/a><\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Heran\u00e7a de templates e extens\u00e3o de templates b\u00e1sicos<\/h3>\n<p>O sistema de heran\u00e7a de templates do Django permite que voc\u00ea crie um template b\u00e1sico contendo a estrutura-padr\u00e3o e o layout do seu Web site ou aplicativo.<\/p>\n<p>Em seguida, voc\u00ea pode criar templates-filhos que herdam as caracter\u00edsticas do template b\u00e1sico e substituem blocos espec\u00edficos de se\u00e7\u00f5es, conforme a necessidade. Isso encoraja a reutiliza\u00e7\u00e3o de c\u00f3digo e a consist\u00eancia entre os seus diferentes templates.<\/p>\n<p>Para criar um template b\u00e1sico, define-se um bloco usando a tag <code>{% block %}<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><!-- base.html -->\n\n\n\n    \n  \n  \n    {% block content %}\n    {% endblock %}\n  \n<\/pre>\n<p>Depois, os templates-filhos estendem os templates b\u00e1sicos e substituem certos blocos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><!-- child_template.html -->\n{% extends 'base.html' %}\n\n{% block title %}My Page Title{% endblock %}\n\n{% block content %}<\/pre>\n<h1>My Page Content<\/h1>\n<p>This is the content of my page.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% endblock %}<\/pre>\n<h2 class=\"wp-block-heading\">Tags de templates do Django<\/h2>\n<p>Tags s\u00e3o um elemento essencial dos templates do Django. Elas disponibilizam v\u00e1rias fun\u00e7\u00f5es, desde loops e renderiza\u00e7\u00f5es condicionais at\u00e9 a heran\u00e7a e a inclus\u00e3o de templates.<\/p>\n<p>Vamos explor\u00e1-las em mais detalhes.<\/p>\n<h3 class=\"wp-block-heading\">Tags comuns de templates do Django<\/h3>\n<p>H\u00e1 v\u00e1rias tags de templates no Django, mas estas s\u00e3o as que voc\u00ea provavelmente usar\u00e1 com mais frequ\u00eancia:<\/p>\n<ul>\n<li><code>{% if %}<\/code>: Esta tag permite que voc\u00ea renderize ou n\u00e3o conte\u00fado com base em uma condi\u00e7\u00e3o espec\u00edfica. Ela costuma ser usada com as tags <code>{% else %}<\/code> e <code>{% elif %}<\/code>.<\/li>\n<li><code>{% for %}<\/code>: Esta tag \u00e9 usada para iterar em uma sequ\u00eancia, como uma lista ou conjunto de consultas, e renderizar conte\u00fado para cada item da sequ\u00eancia.<\/li>\n<li><code>{% include %}<\/code>: Esta tag permite incluir o conte\u00fado de outro arquivo de template dentro da template atual. Ela facilita a reutiliza\u00e7\u00e3o de trechos comuns de templates em v\u00e1rios outros templates.<\/li>\n<li><code>{% block %}<\/code>: Esta tag \u00e9 usada em conjunto com a heran\u00e7a de templates. Ela define um bloco de conte\u00fado que pode ser substitu\u00eddo pelos templates-filhos ao estenderem um template b\u00e1sico.<\/li>\n<li><code>{% extends %}<\/code>: Esta tag especifica o template b\u00e1sico cujos atributos o template atual deve herdar.<\/li>\n<li><code>{% url %}<\/code>: Esta tag \u00e9 usada para gerar uma URL para um padr\u00e3o nomeado de URL no seu projeto do Django. Ela ajuda a manter os seus templates dissociados dos caminhos reais das URLs.<\/li>\n<li><code>{% load %}<\/code>: Esta tag \u00e9 usada para carregar tags e filtros personalizados de templates a partir de um m\u00f3dulo ou biblioteca do Python, permitindo estender a funcionalidade do sistema de templates do Django.<\/li>\n<\/ul>\n<p>Estes s\u00e3o apenas alguns exemplos das muitas tags de templates dispon\u00edveis no Django. Tags como <code>{% with %}<\/code>, <code>{% cycle %}<\/code>, <code>{% comment %}<\/code> e outras podem fornecer fun\u00e7\u00f5es adicionais para projetos avan\u00e7ados, ajudando a criar aplicativos personalizados e eficientes.<\/p>\n<h3 class=\"wp-block-heading\">Como usar tags de templates<\/h3>\n<p>Aqui est\u00e1 um exemplo detalhado de como voc\u00ea poderia usar tags em um template do Django:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% extends 'base.html' %}\n{% load custom_filters %}\n\n{% block content %}<\/pre>\n<h1>{{ page_title }}<\/h1>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  {% if object_list %}<\/pre>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>{% for obj in object_list %} <!-- We truncate the object name to 25 characters. -->\n<li>{{ obj.name|truncate:25 }}<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>{% endfor %}<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  {% else %}<\/pre>\n<p>No objects found.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  {% endif %}\n\n  {% include 'partials\/pagination.html' %}\n{% endblock %}<\/pre>\n<p>Neste exemplo, estendemos um template b\u00e1sico, carregamos filtros personalizados e depois definimos um bloco para o conte\u00fado principal.<\/p>\n<p>Dentro do bloco, verificamos se existe <code>object_list<\/code>. Se existir, fazemos um loop atrav\u00e9s dessa lista e mostramos os nomes truncados de cada objeto. Se a lista estiver vazia, mostramos a mensagem &#8220;No objects found&#8221;.<\/p>\n<p>Por fim, inclu\u00edmos uma template parcial para pagina\u00e7\u00e3o. Esse template \u00e9 um trecho reutiliz\u00e1vel de c\u00f3digo em HTML que pode ser inclu\u00eddo em outros templates, permitindo que voc\u00ea gerencie e atualize elementos comuns (como a pagina\u00e7\u00e3o) de forma mais eficiente.<\/p>\n<h2 class=\"wp-block-heading\">Templates administrativos do Django<\/h2>\n<p>A interface administrativa inclu\u00edda no Django \u00e9 uma maneira amig\u00e1vel e intuitiva de gerenciar dados de aplicativos. Ela funciona atrav\u00e9s de um conjunto de templates que definem sua estrutura, seu layout e sua apar\u00eancia.<\/p>\n<h3 class=\"wp-block-heading\">Funcionalidade<\/h3>\n<p>Os templates administrativos do Django desempenham diversas tarefas:<\/p>\n<ul>\n<li><strong>Autentica\u00e7\u00e3o<\/strong>: Controla a autentica\u00e7\u00e3o, o login e o logout dos usu\u00e1rios.<\/li>\n<li><strong>Gerenciamento de modelos<\/strong>: Mostra listas de inst\u00e2ncias de modelos e cria, edita e exclui inst\u00e2ncias, conforme a necessidade.<\/li>\n<li><strong>Renderiza\u00e7\u00e3o de formul\u00e1rios<\/strong>: Renderiza formul\u00e1rios para criar e editar inst\u00e2ncias de modelos.<\/li>\n<li><strong>Navega\u00e7\u00e3o<\/strong>: Renderiza a estrutura de navega\u00e7\u00e3o da interface administrativa, incluindo o menu principal e submenus espec\u00edficos de cada aplicativo.<\/li>\n<li><strong>Pagina\u00e7\u00e3o<\/strong>: Renderiza controles de pagina\u00e7\u00e3o ao mostrar listas de inst\u00e2ncias de modelos.<\/li>\n<li><strong>Hist\u00f3rico<\/strong>: Mostra e gerencia o hist\u00f3rico de altera\u00e7\u00f5es das inst\u00e2ncias de modelos.<\/li>\n<\/ul>\n<p>Os templates administrativos incorporados ao Django fornecem uma base s\u00f3lida para gerenciar os dados do seu aplicativo.<\/p>\n<h3 class=\"wp-block-heading\">Personaliza\u00e7\u00e3o de templates administrativos<\/h3>\n<p>Embora os templates administrativos do Django ofere\u00e7am uma interface satisfat\u00f3ria e funcional desde a instala\u00e7\u00e3o, talvez voc\u00ea queira personalizar a apar\u00eancia ou o comportamento dele para atender \u00e0s necessidades espec\u00edficas do seu projeto.<\/p>\n<p>Voc\u00ea pode mudar elementos para corresponderem ao branding do seu projeto, melhorar a experi\u00eancia do usu\u00e1rio ou adicionar recursos personalizados, exclusivos do seu aplicativo.<\/p>\n<p>H\u00e1 v\u00e1rias maneiras de fazer isso:<\/p>\n<ul>\n<li><strong>Substitui\u00e7\u00e3o de templates<\/strong>: Voc\u00ea pode substituir os templates administrativos padr\u00e3o, criando templates com a mesma estrutura de arquivos e as mesmas conven\u00e7\u00f5es de nomenclatura no diret\u00f3rio de templates do seu projeto. Assim, o Django usar\u00e1 automaticamente os seus templates personalizados, em vez dos seus pr\u00f3prios.<\/li>\n<li><strong>Extens\u00e3o de templates b\u00e1sicos<\/strong>: Muitos dos templates administrativos do Django usam heran\u00e7a de templates. Voc\u00ea pode criar templates que estendem os templates administrativos b\u00e1sicos e substituem se\u00e7\u00f5es ou blocos espec\u00edficos.<\/li>\n<li><strong>Op\u00e7\u00f5es de templates<\/strong>: O Django tem v\u00e1rias op\u00e7\u00f5es de templates que permitem personalizar o comportamento da interface administrativa. Isso inclui mostrar certos campos, especificar quais deles devem ser edit\u00e1veis e definir templates personalizados para campos espec\u00edficos do modelo.<\/li>\n<li><strong>Personaliza\u00e7\u00e3o do site administrativo<\/strong>: Voc\u00ea pode personalizar a apar\u00eancia e o comportamento do site administrativo criando subclasses da classe <code>AdminSite<\/code> e registrando o seu site administrativo personalizado no Django.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">Templates de URLs no Django<\/h2>\n<p>Os templates de URLs oferecem uma maneira flex\u00edvel de definir e gerar URLs para aplicativos Web no Django.<\/p>\n<h3 class=\"wp-block-heading\">Compreendendo os templates de URLs<\/h3>\n<p>No Django, voc\u00ea define padr\u00f5es de URLs no arquivo &#8220;urls.py&#8221; do projeto, usando a fun\u00e7\u00e3o &#8220;path&#8221; do m\u00f3dulo &#8220;django.urls&#8221;.<\/p>\n<p>Alguns desses padr\u00f5es de URLs s\u00e3o mapeados a fun\u00e7\u00f5es (visualiza\u00e7\u00f5es) do Python que processam as solicita\u00e7\u00f5es correspondentes de HTTP.<\/p>\n<p>Veja um exemplo de padr\u00e3o b\u00e1sico de URL no Django:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nfrom django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('', views.home, name='home'),\n    path('about\/', views.about, name='about'),\n]<\/pre>\n<p>Neste exemplo, os padr\u00f5es de URLs <code>' '<\/code> e <code>'about\/'<\/code> s\u00e3o mapeados \u00e0s fun\u00e7\u00f5es de visualiza\u00e7\u00e3o <code>views.home<\/code> e <code>views.about<\/code>, respectivamente.<\/p>\n<h3 class=\"wp-block-heading\">Gera\u00e7\u00e3o din\u00e2mica de URLs com templates de URLs<\/h3>\n<p>Os templates de URLs do Django permitem incluir vari\u00e1veis ou par\u00e2metros em padr\u00f5es de URLs. Isso significa que voc\u00ea pode criar URLs din\u00e2micas que representam diferentes inst\u00e2ncias do mesmo recurso ou incluem dados adicionais.<\/p>\n<p>Se o seu arquivo &#8220;urls.py&#8221; incluir outros arquivos de URLs atrav\u00e9s de <code>include()<\/code>, o PyCharm automaticamente re\u00fane e reconhece todas as rotas aninhadas, garantindo que as sugest\u00f5es de nomes de URLs continuem exatas. Voc\u00ea tamb\u00e9m pode navegar at\u00e9 as defini\u00e7\u00f5es de URLs dando um <em>Ctrl+<\/em>clique no nome de uma URL para saltar diretamente ao c\u00f3digo-fonte correspondente, mesmo se a URL estiver definida em um arquivo-filho.<\/p>\n<p>Vamos dar uma olhada em um exemplo de template de URL com uma vari\u00e1vel:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nurlpatterns = [\n    path('blog\/\/', views.year_archive, name='blog_year_archive'),\n]<\/pre>\n<p>Neste caso, a URL <code>\u2018blog\/\/\u2019<\/code> inclui uma vari\u00e1vel &#8220;year&#8221;, do tipo <code>int<\/code>. Quando uma solicita\u00e7\u00e3o coincidir com esse padr\u00e3o, o Django passar\u00e1 o valor de &#8220;year&#8221; como argumento para a fun\u00e7\u00e3o de visualiza\u00e7\u00e3o <code>views.year_archive<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Como usar URLs no Django<\/h3>\n<p>No Django, as URLs s\u00e3o a base de qualquer aplicativo e funcionam associando solicita\u00e7\u00f5es do usu\u00e1rio \u00e0s visualiza\u00e7\u00f5es apropriadas. Ao definir padr\u00f5es de URLs que coincidem com visualiza\u00e7\u00f5es espec\u00edficas, o Django garante que o seu site permane\u00e7a organizado e escal\u00e1vel.\u00a0<\/p>\n<h4 class=\"wp-block-heading\">Como usar templates de URLs com a fun\u00e7\u00e3o <code>reverse<\/code> do Django<\/h4>\n<p>A fun\u00e7\u00e3o <code>reverse<\/code> do Django permite gerar URLs com base em seus padr\u00f5es nomeados de URLs. Essa fun\u00e7\u00e3o recebe o nome do padr\u00e3o de URL como seu primeiro argumento, antes de quaisquer outros argumentos necess\u00e1rios, e retorna a URL correspondente.<\/p>\n<p>Veja um exemplo pr\u00e1tico:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># views.py\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\ndef blog_post_detail(request, year, month, slug):\n    # ...\n    url = reverse('blog_post_detail', args=[year, month, slug])\n    return render(request, 'blog\/post_detail.html', {'url': url})<\/pre>\n<p>A fun\u00e7\u00e3o &#8220;reverse&#8221; \u00e9 usada para gerar a URL para o padr\u00e3o de URL <code>\u2018blog_post_detail\u2019<\/code>, passando os valores do ano, do m\u00eas e do <a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/glossary\/#term-slug\" target=\"_blank\" rel=\"noopener\">slug<\/a> como argumentos.<\/p>\n<p>Voc\u00ea pode ent\u00e3o usar a URL retornada em templates ou em outras partes do aplicativo.<\/p>\n<h4 class=\"wp-block-heading\">Usando tags de URLs em templates do Django<\/h4>\n<p>A tag de template <code>{% url %}<\/code> do Django \u00e9 uma maneira elegante de gerar URLs diretamente dentro do seu template. Em vez de explicitar as URLs no c\u00f3digo, voc\u00ea pode fazer refer\u00eancia a padr\u00f5es nomeados de URLs. Isso torna os seus templates mais flex\u00edveis e f\u00e1ceis de gerenciar.<\/p>\n<p>Veja um exemplo:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"><a href=\"{% url 'blog_post_detail' year=2024 month=10 slug=post.slug %}\"> \nLeia mais \n<\/a><\/pre>\n<p>Neste caso, a tag <code>{% url %}<\/code> cria uma URL para a visualiza\u00e7\u00e3o <code>blog_post_detail<\/code>, passando os par\u00e2metros <code>year<\/code>, <code>month<\/code> e <code>slug<\/code>. \u00c9 importante assegurar que esses argumentos coincidam com o padr\u00e3o de URL definido no seu arquivo &#8220;urls.py&#8221;, que deve se parecer com isto:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">path('blog\/\/\/\/', views.blog_post_detail, name='blog_post_detail'),<\/pre>\n<p>Esta abordagem ajuda a manter os seus templates limpos e adapt\u00e1veis, especialmente mais tarde, \u00e0 medida que o seu projeto evoluir.<\/p>\n<h2 class=\"wp-block-heading\">Templates do Jinja e do Django<\/h2>\n<p>Embora o Django incorpore um mecanismo de templates (a DTL), os desenvolvedores tamb\u00e9m t\u00eam a op\u00e7\u00e3o de usar alternativas, como o Jinja.<\/p>\n<p>O <a href=\"https:\/\/jinja.palletsprojects.com\/en\/stable\/\" target=\"_blank\" rel=\"noopener\">Jinja<\/a> \u00e9 um mecanismo de templates popular, moderno e cheio de recursos para o Python. Ele foi desenvolvido para o framework de Web <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/django-vs-flask-which-is-the-best-python-web-framework\/\">Flask<\/a>, mas tamb\u00e9m \u00e9 compat\u00edvel com o Django.<\/p>\n<p>O mecanismo foi projetado para ser r\u00e1pido, seguro e altamente extens\u00edvel. Seu amplo conjunto de recursos torna-o vers\u00e1til para renderizar conte\u00fado din\u00e2mico.<\/p>\n<p>Estes s\u00e3o alguns dos principais recursos e vantagens do Jinja em rela\u00e7\u00e3o \u00e0 DTL do Django:<\/p>\n<ul>\n<li>Uma sintaxe mais concisa e intuitiva.<\/li>\n<li>Execu\u00e7\u00e3o em uma sandbox, para mais seguran\u00e7a contra ataques de inje\u00e7\u00e3o de c\u00f3digo.<\/li>\n<li>Um sistema de heran\u00e7a mais flex\u00edvel e poderoso.<\/li>\n<li>Melhores ferramentas de depura\u00e7\u00e3o e mecanismos de gera\u00e7\u00e3o de relat\u00f3rios.<\/li>\n<li>Desempenho mais r\u00e1pido ao trabalhar com templates complexos ou grandes conjuntos de dados.<\/li>\n<li>Maior funcionalidade, com filtros e macros incorporados, permitindo uma l\u00f3gica de renderiza\u00e7\u00e3o mais complexa, sem atravancar o template.<\/li>\n<\/ul>\n<p>O PyCharm detecta automaticamente o tipo de arquivo *.jinja e fornece realce de sintaxe, complementa\u00e7\u00e3o de c\u00f3digo e detec\u00e7\u00e3o de erros, al\u00e9m de suporte a filtros e extens\u00f5es personalizados, garantindo uma experi\u00eancia suave de desenvolvimento.<\/p>\n<p>Apesar desses benef\u00edcios, tamb\u00e9m \u00e9 importante lembrar que integrar o Jinja em um projeto do Django requer uma configura\u00e7\u00e3o inicial mais ampla e complexa.<\/p>\n<p>Alguns desenvolvedores tamb\u00e9m podem preferir ficar com o mecanismo de template incorporado do Django, para manter tudo dentro do ecossistema do Django.<\/p>\n<h3 class=\"wp-block-heading\">Programe mais rapidamente com templates din\u00e2micas no Django<\/h3>\n<p>Com o recurso de templates din\u00e2micos do PyCharm, voc\u00ea pode rapidamente incluir trechos comumente usados de c\u00f3digo com um simples atalho de teclado.<\/p>\n<p>Tudo que voc\u00ea precisa fazer \u00e9 invocar os templates din\u00e2micos teclando <em>\u2318J<\/em>, digitando <code>ListView<\/code> e pressionando a tecla Tab.<\/p>\n<figure class=\"wp-block-video\"><video src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/2-1.mov\" controls=\"controls\" width=\"300\" height=\"150\"><\/video><\/figure>\n<p>Isso reduz a programa\u00e7\u00e3o repetitiva, acelera o desenvolvimento e garante uma sintaxe consistente. Voc\u00ea pode at\u00e9 <strong>personalizar ou criar os seus pr\u00f3prios templates<\/strong> para atender a necessidades espec\u00edficas do seu projeto. Este recurso \u00e9 \u00fatil especialmente para a sintaxe da DTL, que frequentemente repete loops, condicionais e estruturas de blocos.<\/p>\n<h2 class=\"wp-block-heading\">Uso de templates do Django: dicas e melhores pr\u00e1ticas<\/h2>\n<p>Trabalhar com templates do Django \u00e9 uma excelente maneira de gerenciar a camada de apresenta\u00e7\u00e3o dos seus aplicativos Web.<\/p>\n<p>Por\u00e9m, \u00e9 essencial seguir orienta\u00e7\u00f5es e fazer otimiza\u00e7\u00f5es de desempenho, para garantir que os seus templates sejam bem mantidos, seguros e sistem\u00e1ticos.<\/p>\n<p>Estas s\u00e3o algumas dicas e melhores pr\u00e1ticas a se lembrar ao usar templates no Django:<\/p>\n<ul>\n<li><strong>Separe a apresenta\u00e7\u00e3o da l\u00f3gica de neg\u00f3cios<\/strong>. Mantenha o foco dos templates em renderizar os dados e fa\u00e7a processamentos complexos em visualiza\u00e7\u00f5es ou modelos.<\/li>\n<li><strong>Organize os seus templates de forma l\u00f3gica<\/strong>. Siga a estrutura de arquivos do Django separando os templates por aplicativo e fun\u00e7\u00e3o, usando subdiret\u00f3rios se necess\u00e1rio.<\/li>\n<li><strong>Use as conven\u00e7\u00f5es de nomenclatura do Django<\/strong>. O Django segue o princ\u00edpio de que &#8220;as conven\u00e7\u00f5es s\u00e3o mais importantes que a configura\u00e7\u00e3o&#8221;, permitindo que voc\u00ea nomeie os seus templates de uma maneira espec\u00edfica, para que voc\u00ea n\u00e3o precise fornecer explicitamente os nomes dos templates. Por exemplo, ao usar visualiza\u00e7\u00f5es baseadas em classes, como <code>ListView<\/code>, o Django procura automaticamente um template com o nome de <strong>\/_list.html<\/strong>, o que simplifica o seu c\u00f3digo.<\/li>\n<li><strong>Divida tarefas elaboradas em componentes reutiliz\u00e1veis.<\/strong> Promova a reutiliza\u00e7\u00e3o do c\u00f3digo e torne a manuten\u00e7\u00e3o mais f\u00e1cil usando tags, filtros e &#8220;includes&#8221; de templates.<\/li>\n<li><strong>Siga conven\u00e7\u00f5es consistentes de nomenclatura.<\/strong> Use nomes claros e descritivos para os seus templates, tags e filtros. Isso facilita para os outros desenvolvedores lerem o seu c\u00f3digo.<\/li>\n<li><strong>Use os filtros seguros de renderiza\u00e7\u00e3o do Django.<\/strong> Sempre escape os dados fornecidos pelo usu\u00e1rio antes da renderiza\u00e7\u00e3o, para evitar vulnerabilidades de XSS.<\/li>\n<li><strong>Documente l\u00f3gica complexa nos templates.<\/strong> Fa\u00e7a coment\u00e1rios claros para explicar partes complicadas dos seus templates. Isso ajudar\u00e1 outras pessoas (e voc\u00ea mesmo, no futuro) a compreenderem o seu c\u00f3digo.<\/li>\n<li><strong>Fa\u00e7a profiling dos seus templates<\/strong>. Use as ferramentas de profiling do Django para encontrar e otimizar gargalos de desempenho, como loops ineficientes e l\u00f3gica rebuscada.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.jetbrains.com\/guide\/django\/links\/django-in-pycharm-tips-reloaded\/\" target=\"_blank\" rel=\"noopener\">Assista a este v\u00eddeo<\/a> para explorar as dicas sobre o Django e os recursos do PyCharm em mais detalhes.<\/p>\n<h2 class=\"wp-block-heading\">Conclus\u00e3o<\/h2>\n<p>Quer voc\u00ea esteja desenvolvendo um Web site simples ou um aplicativo mais complicado, agora voc\u00ea j\u00e1 deve saber como criar templates que melhoram a experi\u00eancia do usu\u00e1rio e simplificam o seu processo de desenvolvimento no Django.<\/p>\n<p>Mas os templates s\u00e3o apenas um componente do framework Django. Explore nossas outras <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/tag\/django\/\">postagens de blog sobre o Django<\/a>, al\u00e9m de recursos que podem ajudar voc\u00ea a <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/01\/how-to-learn-django\/\">aprender Django<\/a>, descobrir <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/12\/django-5-0-delight-unraveling-the-newest-features\/\">os \u00faltimos recursos do Django<\/a> e muito mais. Talvez voc\u00ea tamb\u00e9m queira se familiarizar com a <a href=\"https:\/\/docs.djangoproject.com\/en\/5.0\/\" target=\"_blank\" rel=\"noopener\">documenta\u00e7\u00e3o oficial do Django<\/a>.<\/p>\n<h2 class=\"wp-block-heading\">Suporte confi\u00e1vel ao Django no PyCharm<\/h2>\n<p>O <a href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\">PyCharm Professional<\/a> est\u00e1 a\u00ed para ajudar a otimizar o fluxo de trabalho dos desenvolvedores em Django, desde completos iniciantes at\u00e9 desenvolvedores experientes.<\/p>\n<p>O IDE para Django oferece assist\u00eancia \u00e0 codifica\u00e7\u00e3o espec\u00edfica para o Django, depura\u00e7\u00e3o, pr\u00e9-visualiza\u00e7\u00f5es din\u00e2micas, navega\u00e7\u00e3o por todo o projeto e recursos de refatora\u00e7\u00e3o. O PyCharm inclui suporte total a templates do Django, permitindo que voc\u00ea os gerencie e edite facilmente. Voc\u00ea tamb\u00e9m pode se conectar ao seu banco de dados com apenas um clique e trabalhar tranquilamente com TypeScript, JavaScript e outros frameworks de front-end.<\/p>\n<p>Para ver os detalhes completos de como trabalhar com templates do Django no PyCharm, consulte nossa <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">documenta\u00e7\u00e3o<\/a>. Pode ser melhor para os que forem relativamente novatos no framework Django ler primeiro nosso tutorial abrangente, que cobre todas as etapas do processo de <a href=\"https:\/\/www.jetbrains.com\/guide\/django\/tutorials\/django-aws\/setup-django\/\" target=\"_blank\" rel=\"noopener\">criar um novo aplicativo com o Django no PyCharm<\/a>.<\/p>\n<p>Pronto para come\u00e7ar? Baixe o PyCharm agora mesmo e desfrute de um processo de desenvolvimento mais produtivo.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Comece a usar o PyCharm Pro gratuitamente<\/a><\/div>\n<\/div>\n\n\n<p><em>Artigo original em ingl\u00eas por:<\/em><\/p>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/evgenia-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Evgenia Verbina\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Evgenia Verbina<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1086,"featured_media":573273,"comment_status":"closed","ping_status":"closed","template":"","categories":[1401,8377],"tags":[963],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/pycharm\/573267"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1086"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=573267"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/pycharm\/573267\/revisions"}],"predecessor-version":[{"id":573310,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/pycharm\/573267\/revisions\/573310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/573273"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=573267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=573267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=573267"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=573267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}