Você não precisa se preocupar em criar slugs no Django. Implemente a geração automática de slug para economizar tempo e otimizar seu fluxo de trabalho.

Como desenvolvedor da web, otimizar a experiência do usuário do seu aplicativo da web é crucial. Para melhorar a experiência do usuário e a visibilidade do mecanismo de pesquisa, use URLs amigáveis ​​com slugs no Django. Criar URLs com slugs é tão fácil quanto escrever uma função, permitindo gerar URLs concisos e descritivos que são fáceis de entender pelos usuários e pelos mecanismos de pesquisa. Isso melhora a usabilidade e a acessibilidade, ao mesmo tempo em que aumenta as classificações dos mecanismos de pesquisa.

Os exemplos de código usados ​​neste artigo podem ser encontrados neste Repositório GitHub.

Criando um projeto Django

O Django fornece vários métodos para gerar slugs e usá-los em seu site. Para ilustrar diferentes maneiras de implementar slugs, este tutorial o orientará na criação de um aplicativo da web de blog simples.

Antes de configurar um projeto Django,

instagram viewer
criar e ativar um ambiente virtual para instalar as dependências necessárias. Depois de ativar seu ambiente virtual, siga estas etapas para configurar seu projeto:

  • Instale o Django usando o comando pip em sua linha de comando:
pip instalar django
  • Crie um projeto usando o django-admin Utilitário. Este tutorial usará project_core como o nome do projeto.
django-admin startproject project_core .
  • Crie um aplicativo chamado receitas.
python manage.py startapp receitas
  • Adicione seu aplicativo aos aplicativos instalados no seu projeto setting.py arquivo.
INSTALADO_APPS = [
'...'
'receitas',
]
  • Execute seu aplicativo digitando o seguinte comando em sua ferramenta de linha de comando:
python manage.py runserver
  • Navegar para http://127.0.0.1:8000/ em seu navegador. Você deve ver esta página:
  • Configure o padrão de URL no seu projeto urls.py arquivo
de django.urls importar caminho, incluir

urlpadrões = [
'...',
caminho('', incluir('receitas.urls'))
]

Criando um Slug no Django

Para gerar um slug no Django, você precisa incluir um campo slug em seus modelos. Siga estas etapas para criar um slug no Django.

Criar um modelo

Na tua modelos.py arquivo, crie um novo modelo e inclua um campo slug. Aqui está um exemplo:

aulaReceita(modelos. Modelo):
nome = modelos. CharField (max_length=225, em branco =Falso, null=Falso)
ingredientes = modelos. TextField (em branco =Falso, null=Falso)
instruções = modelos. TextField (em branco =Falso, null=Falso)
data_criada = modelos. DateTimeField (auto_now=Verdadeiro)
lesma = modelos. SlugField (nulo = Verdadeiro, em branco =Verdadeiro, único=Verdadeiro)

No exemplo acima, o modelo Receita contém um campo chamado lesma. O lesma campo tem os atributos, nulo e em branco definido como Verdadeiro.

Aplicar migrações ao seu modelo

Depois de criar um modelo, você deve executar o seguinte comando em sua ferramenta de linha de comando para criar a tabela em seu banco de dados:

python manage.py makemigrations && python manage.py migrar

O comando acima irá primeiro gerar um arquivo de migração e, em seguida, atualizar o banco de dados executando as instruções dentro do arquivo de migração.

Adicionar dados ao seu banco de dados

Registre seu modelo digitando o seguinte em seu admin.py arquivo:

de django.contrib importar administrador
de .modelos importar Receita

admin.site.register (Receita)

Em seguida, abra sua ferramenta de linha de comando e crie um superusuário para o seu painel de administração executando este comando:

python manage.py createsuperuser

O comando acima o guiará pelas etapas descritas nesta imagem:

Depois de criar um superusuário, inicie seu servidor local com o seguinte comando:

python manage.py runserver

Depois que o servidor iniciar, você deve navegar para http://127.0.0.1:8000/admin/, faça login com os detalhes que você usou para criar um superusuário, e adicione manualmente algumas receitas ao seu banco de dados. Você deve prestar atenção ao campo slug.

Crie exibições para seu aplicativo

Abre o teu views.py arquivo e crie duas exibições para seu aplicativo. A primeira visualização simplesmente exibirá uma visão geral de suas receitas, enquanto a segunda fornecerá mais detalhes sobre cada receita. Você pode usar estas visualizações em seu projeto:

de django.shortcuts importar renderizar, get_object_or_404
de .modelos importar Receita

# Exibição de lista para receitas
deflista_receitas(solicitar):
receitas = Recipe.objects.all()
retornar renderizar (solicitação, 'receitas/receita_lista.html', {"receitas":receitas})

# Visualização detalhada de cada receita
defreceita_detalhe(pedido, receita_slug):
receita = get_object_or_404(Receita, slug=recipe_slug)
retornar renderizar (solicitação, 'receitas/recipe_detail.html', {'receita': receita})

No trecho de código acima, o lista_receitas view retorna a lista de todas as receitas para o modelo. Por outro lado, o receita_detalhe view retorna uma única receita para o modelo. Esta visualização recebe um parâmetro adicional chamado receita_slug que é usado para obter o slug para uma receita específica.

Configurar padrões de URL para suas exibições

No diretório do seu aplicativo (ou receita pasta), crie um arquivo chamado urls.py para adicionar caminhos de URL para seu aplicativo. Aqui está um exemplo:

de django.urls importar caminho
de .Visualizações importar lista_receita, detalhe_receita

urlpadrões = [
caminho('', lista_receita, nome='receita caseira'),
caminho('receita//', receita_detalhe, nome='receita_detalhe'),
]

No trecho de código acima, o segundo caminho introduz o slug no URL da página.

Crie modelos para seu aplicativo

Para exibir as receitas no navegador, crie modelos para suas visualizações. Um modelo deve ser para o lista_receitas vista enquanto o outro deve ser para o receita_detalhe visualizar. Para usar o slug em seu modelo, siga este formato, {% url 'view_name' receita.slug %}. Aqui estão dois exemplos que você pode usar em seu código:

 receitas/receita_lista.html 
{% estende 'base.html' %}

{% bloquear conteúdo %}
<h1aula="meu-5 centro de texto">receitash1>
<Centro>
<ulaula="lista-grupo w-75">
{% para receita em receitas %}
<liaula="lista-grupo-item my-3">
<h2aula="mb-3">
<ahref="{% url 'receita_detalhe' receita.slug %}">
{{ receita.nome }}
a>
h2>
<paula="w-50">
Ingredientes: {{ receita.ingredientes }}
p>
<paula="texto silenciado">
Criado: {{ receita.date_created }}
p>
li>
{% vazio %}
<liaula="lista-grupo-item">Nenhuma receita encontrada.li>
{% endfor %}
ul>
Centro>
{% bloco final %}

O modelo HTML acima listará todas as receitas em seu banco de dados e exibirá Nenhuma receita encontrada se não houver receitas. Ele usa classes Bootstrap para estilizar. Você pode aprender como usar Bootstrap com Django. O modelo acima deve ficar assim no navegador:

 receitas/recipe_detail.html 
{% estende 'base.html' %}

{% bloquear conteúdo %}
<Centro>
<divaula="w-75">
<h1aula="mt-5mb-4">{{ receita.nome }}h1>
<h3>Ingredientesh3>
<p>{{ receita.ingredientes }}p>
<h3>Instruçõesh3>
<p>{{ receita.instruções }}p>
<paula="texto silenciado">Criado: {{ receita.date_created }}p>
div>
Centro>
{% bloco final %}

O modelo HTML acima retorna detalhes sobre uma receita específica. No navegador, a página acima deve ficar assim:

Você notará que a URL agora contém qualquer slug que você adicionou em seu banco de dados para cada receita. Se você não entende como o sistema de modelos funciona, você deve primeiro aprender herança de modelo em Django e Arquitetura MVT do Django.

Gerar Automaticamente um Slug no Django

Com slugs, o que você realmente deseja é gerá-los automaticamente com base em um campo do seu modelo. Para fazer isso, você deve modificar o salvar() em seu modelo e especifique suas próprias regras antes que os objetos sejam salvos no banco de dados. Aqui está um exemplo simples que você pode adicionar à sua classe de modelo:

# importar slugify
de django.template.defaultfilters importar slugify

defsalvar(auto, *args, **kwargs):
senão self.slug:
self.slug = slugify (self.name)
super().save(*args, **kwargs)

A função acima primeiro verifica se existe um slug para o objeto modelo. Se não houver slug, ele usa o slugify função para gerar um a partir do campo de nome no modelo. Depois de substituir o salvar() método, abra seu painel de administração e adicione algumas receitas. Desta vez, você não precisa preencher o campo de slug porque ele será preenchido automaticamente assim que você salvar sua receita.

Se você navegar até a página de detalhes da receita recém-adicionada, verá que a URL usa o nome da receita como slug.

Às vezes, você terá várias receitas com o mesmo nome e isso causará erros no seu slug. Você pode corrigir isso adicionando um elemento exclusivo ao seu slug, como a data de criação. Aqui está um exemplo simples:

self.slug = slugify (self.name + "-" + str (self.date_created))

Use slugs para aprimorar a experiência de URL

Ao contrário do bom e velho pacote, os slugs fornecem muitos benefícios, incluindo flexibilidade e portabilidade, pois não estão vinculados a identificadores de URL específicos, como a chave primária. Portanto, se você alterar a estrutura do banco de dados ou migrar seus dados, ainda poderá manter URLs consistentes. Slugs também melhoram a facilidade de SEO.