You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目不修改Model实现URL添加项目标题为Slug

可以实现,无需修改models.py

完全可以只通过修改urls.py、views.py和模板来实现URL中包含项目标题的slug,无需改动模型或数据库。以下是具体步骤和错误排查方案:

1. 修改urls.py配置URL模式

在URL规则中添加slug参数,保留pk作为实际查询的唯一标识:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 其他URL规则
    path('project/<int:pk>/<slug:slug>/', views.project_details, name='project_details'),
]

2. 调整views.py中的视图函数

视图依然通过pk查询项目,slug仅用于URL美化,可选添加slug验证逻辑(防止手动篡改URL):

# views.py
from django.shortcuts import get_object_or_404, redirect
from django.utils.text import slugify
from .models import Project

def project_details(request, pk, slug):
    project = get_object_or_404(Project, pk=pk)
    
    # 可选:验证slug是否匹配,不匹配则重定向到正确URL
    expected_slug = slugify(project.title)
    if slug != expected_slug:
        return redirect('project_details', pk=pk, slug=expected_slug)
    
    return render(request, 'project_details.html', {'project': project})

3. 修正模板中的URL链接标签

使用Django内置的slugify过滤器将项目标题转换为slug格式,确保URL标签参数与urls.py定义一致:

<!-- 模板文件(如project_list.html) -->
<a href="{% url 'project_details' pk=project.pk slug=project.title|slugify %}">{{ project.title }}</a>

常见TemplateSyntaxError排查

你遇到的模板语法错误大概率是以下原因:

  • 未使用slugify过滤器:直接传递原始标题作为slug参数,导致URL包含特殊字符或空格,触发语法错误
  • URL标签参数格式错误:比如遗漏参数名(如直接写project.pk而非pk=project.pk)
  • 参数顺序不匹配:urls.py中定义的参数顺序是pk在前、slug在后,模板中需保持一致

内容的提问来源于stack exchange,提问作者Daniel Marsh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:25:07