Django报错:HttpRequest.__init__仅接受1个参数却传2个,需实现点击文章输出slug
问题解决:输出文章Slug并修复HttpRequest初始化错误
错误原因
你在article_detail视图中错误地尝试返回HttpRequest(slug)——HttpRequest是Django用来封装请求的类,不是用来生成响应的,而且它的构造函数不需要额外传入slug参数,这直接导致了HttpRequest.__init__() takes 1 positional argument but 2 were given的报错。
修复方案
要输出文章的slug,你需要使用HttpResponse(Django用来返回响应的类),而非HttpRequest。修改视图代码如下:
修改后的视图代码
from datetime import date from django.shortcuts import render from .models import Article from django.http import HttpResponse # 替换HttpRequest为HttpResponse # Create your views here. def article_list(request): articles = Article.objects.all().order_by('date') return render(request,'articles/article_list.html', {'articles': articles} ) def article_detail(request, slug): return HttpResponse(slug) # 返回HttpResponse输出slug
验证逻辑
当前的路由配置已经正确:path('<slug:slug>/', views.article_detail, name = 'detail')会把URL中的slug值传递给视图的slug参数,修改后的视图会直接将这个slug作为响应内容返回,满足你点击文章后输出对应slug的需求。
内容的提问来源于stack exchange,提问作者Aleksandra Milicevic
相关产品推荐
相关产品推荐

