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

Django中URL出现%20而非连字符的问题排查

问题分析与解决

你的URL出现%20编码而非连字符的问题,核心是参数传递不匹配加上字段使用错误,逐个修正即可:

  1. 修正get_absolute_url的传参
    你的模型里get_absolute_url当前传递的是self.title,但URL配置和视图都是基于slug字段工作的——直接传含空格的title,自然会被编码成%20。改成传递生成好的slug:

    def get_absolute_url(self):
        return reverse("rants:rant-detail", kwargs={"slug": self.slug})
    
  2. 确认视图与URL的参数匹配
    你的URL路径<str:slug>/和视图的slug_url_kwarg = "slug"配置是正确的,修正get_absolute_url后就能和这部分对应上,保证用slug值构建URL。

  3. 确保slug字段正确生成
    你自定义了slugify_function来把下划线替换成连字符并转小写,但要确认父类TitleSlugDescriptionModel确实在调用这个方法生成slug。如果是自定义的父类,要保证它会用这个方法处理title生成符合要求的slug;如果是第三方库的类,也要确认配置正确,确保空格被替换成连字符,生成类似first-rant-on-rantr的slug值。

另外,检查现有数据的slug字段是否正确生成,如果之前的数据slug不符合要求,可以在Django shell里批量更新:

from your_app.models import Rant
for rant in Rant.objects.all():
    rant.slug = rant.slugify_function(rant.title)
    rant.save()

内容的提问来源于stack exchange,提问作者Vicente Antonio G. Reyes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 02:05:15