pouces vers le haut! à propos de ça. Il y avait un article qui mentionnait à quoi ressemble le slug dans Django, mais pourquoi devriez-vous utiliser la fonction slug dans Django? Comment est-il écrit? Il semble n'y avoir aucun article qui mentionne ce point, j'ai donc décidé de l'écrire.
En conclusion, la raison de l'utilisation de slug est pour les mesures de référencement, mais expliquons d'abord à propos de slug.
Dans le glossaire du document Django, slug est expliqué comme suit.
Limace Une courte étiquette attachée à un élément, composée d'alphabets anglais, de nombres, de traits de soulignement, de traits d'union, généralement utilisée dans les URL. Par exemple, dans l'URL d'une entrée de blog courante:
https://www.djangoproject.com/weblog/2008/apr/12/spring/
La corde (ressort) à la fin est la limace. Glossaire
Je pense qu'il est normal de reconnaître que vous souhaitez ajouter un libellé spécifique à la fin de l'URL.
Comme l'une des directives officielles de Google a le titre et le libellé suivants, Google préfère les URL simples! C'est aussi un gars qui peut prédire le contenu de la page à partir de l'adresse! Il est recommandé d'avoir certaines règles pour et les URL.
Gardez la structure URL de votre site aussi simple que possible. Classez le contenu afin de pouvoir construire l'URL d'une manière logique et compréhensible par l'homme (en utilisant des mots significatifs au lieu d'ID lorsque cela est possible). Par exemple, si vous recherchez des informations sur un avion, une URL comme
http: // en.wikipedia.org / wiki / Aviation
vous dira si c'est ce dont vous avez besoin simplement en la regardant. Je peux le faire.http: //www.example.com/index.php? id_sezione = 360 & sid = 3a5ebc944f
Gardez une structure d'URL simple
Il existe d'autres directives pour les mesures de référencement (si chaque navigateur est pris en charge, si HTTPS est implémenté, etc.), mais en tant qu'élément, simplifiez l'URL et clarifiez la page que vous consultez. C'est un facteur important dans la prise de mesures de référencement.
En d'autres termes
https://www.djangoproject.com/articles/1
que,
https://www.djangoproject.com/articles/1/introduction
On peut dire qu'une telle forme est préférable.
Lorsque vous créez un blog avec Django, vous pouvez l'utiliser comme une description du contenu de l'article en fournissant un slug au lieu de terminer l'id de l'article. Comme cela est intégré à Django depuis le début, il est préférable de l'utiliser comme mesure de référencement.
Par exemple, lorsque vous écrivez un modèle pour un article, écrivez comme suit.
models.py
from django.db import models
from django.template.defaultfilters import slugify # new
from django.urls import reverse
class Article(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
slug = models.SlugField(null=False, unique=True)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article_detail', kwargs={'slug': self.slug})
def save(self, *args, **kwargs): # new
if not self.slug:
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
Comme avec CharField, vous pouvez également spécifier max_length, qui sera de 50 caractères si max_length n'est pas spécifié. Définissez implicitement Field.db_index sur True.
views.py
from django.views.generic import ListView, DetailView
from .models import Article
class ArticleListView(ListView):
model = Article
template_name = 'article_list.html'
class ArticleDetailView(DetailView):
model = Article
template_name = 'article_detail.html'
urls.py
from django.urls import path
from .views import ArticleListView, ArticleDetailView
urlpatterns = [
path('<slug:slug>', ArticleDetailView.as_view(), name='article_detail'), # new
path('', ArticleListView.as_view(), name='article_list'),
]
admin.py
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'body',)
prepopulated_fields = {'slug': ('title',)} # new
admin.site.register(Article, ArticleAdmin)
article_list.html
<h1>Articles</h1>
{% for article in object_list %}
<ul>
<li><a href="{{ article.get_absolute_url }}">{{ article.title }}</a></li>
</ul>
{% endfor %}
article_detail.html
<div>
<h2>{{ object.title }</h2>
<p>{{ object.body }}</p>
</div>
Recommended Posts