Django中的slug
是一个用于URL的友好字符串,通常由字母、数字、连字符和下划线组成。它主要用于创建易于理解和记忆的URL,而不是使用数据库中的原始ID。slug
在Django的URL配置中经常与path
或re_path
一起使用。
slug
可以使URL更加易读和理解。应用场景包括博客文章、产品页面、事件详情等。
当你在模板中使用{% url %}
标签或在视图中使用reverse()
函数时,如果Django无法找到匹配的URL模式,就会抛出NoReverseMatch
异常。
{% url %}
标签或reverse()
函数中提供的参数匹配。# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('blog/<slug:slug>/', views.blog_detail, name='blog_detail'),
]
<!-- template.html -->
<a href="{% url 'blog_detail' slug=article.slug %}">Read more</a>
{% url %}
标签或reverse()
函数中正确指定。# urls.py
app_name = 'blog'
urlpatterns = [
path('blog/<slug:slug>/', views.blog_detail, name='blog_detail'),
]
<!-- template.html -->
<a href="{% url 'blog:blog_detail' slug=article.slug %}">Read more</a>
# views.py
from django.urls import reverse
def some_view(request):
# 确保slug存在且正确
slug = 'some-slug'
url = reverse('blog_detail', args=[slug])
# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True)
def __str__(self):
return self.title
# views.py
from django.shortcuts import render, get_object_or_404
from .models import Article
def blog_detail(request, slug):
article = get_object_or_404(Article, slug=slug)
return render(request, 'blog_detail.html', {'article': article})
<!-- blog_detail.html -->
<h1>{{ article.title }}</h1>
<p>{{ article.content }}</p>
领取专属 10元无门槛券
手把手带您无忧上云