Django中URL出现%20而非连字符的问题排查
问题分析与解决
你的URL出现%20编码而非连字符的问题,核心是参数传递不匹配加上字段使用错误,逐个修正即可:
修正
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})确认视图与URL的参数匹配
你的URL路径<str:slug>/和视图的slug_url_kwarg = "slug"配置是正确的,修正get_absolute_url后就能和这部分对应上,保证用slug值构建URL。确保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
相关产品推荐
相关产品推荐

