python - /blog/21-detail() 的 TypeError 得到了一个意外的关键字参数“blog_id”
问题描述
我正在为我的项目制作一个工具。我的最终目标是当我在new.html
页面中键入标题、正文时,它会运行并最终从页面create.html
中获取所有信息。我创建了两个应用程序,(写作作品)和(登录作品),但我收到此错误并且找不到任何解决方案:new.html
detail.html
Good
Account
detail() 得到了一个意外的关键字参数“blog_id”
我在 Visual Studio Code 中运行它,现在我正在尝试插入:
def detail(request):
details = get_object(Good, pk= blog_id)
return render(request, 'detail.html', {'details':details})
如果它是正确的,我该怎么办?
主页.html
{% extends 'base.html' %}
{% block contents %}
<body>
</body>
{% endblock %}
网址.py
from django.contrib import admin
from django.urls import path
import good.views
import account.views
urlpatterns = [
path('admin/', admin.site.urls),
path('', good.views.home, name="home"),
path('login/', account.views.login, name="login"),
path('signup/', account.views.signup, name="signup"),
path('new/', good.views.new, name="new"),
path('create/', good.views.create, name="create"),
path('blog/<int:blog_id>', good.views.detail, name="detail"),
]
模型.py
from django.db import models
class Good(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
body = models.TextField()
def __str__(self):
return self.title
管理员.py
from django.contrib import admin
from .models import Good
admin.site.register(Good)
视图.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Good
from django.utils import timezone
def home(request):
return render(request,'home.html')
def new(request):
return render(request, 'new.html')
def create(request):
blog = Good()
blog.title = request.GET['title']
blog.body = request.GET['body']
blog.pub_date = timezone.datetime.now()
blog.save()
return redirect('/blog/' + str(blog.id))
def detail(request):
blogs = Good.objects
return render(request, 'detail.html', {'blogs':blogs})
新的.html
{% extends 'base.html' %}
{% block contents %}
<body>
<br>
<div class="container">
<form action="{% url 'create' %}">
<h4>title: </h4>
<input type="text" name="title">
<br>
<br>
<h4>body: </h4>
<textarea cols=40 rows=10 name="body"></textarea>
<br>
<br>
<input class="btn btn-dark" type="submit" value="submit">
</div>
</body>
{% endblock %}
详细信息.html
{% extends 'base.html' %}
{% block contents %}
<body>
{% for blog in blogs.all %}
<div class="container">
<h1>{{ blog.title }}</h1>
<p>{{ blog.pub_date }}</p>
<p>{{ blog.body }}</p>
</div>
{% endfor %}
</body>
{% endblock %}
解决方案
您必须将blog_id
as 参数传递给 detail 函数,如下所示:
编辑: 如果您想在详细信息页面中显示所有对象,那么您可以这样做:
def detail(request,blog_id):
all_objects = Good.objects.all()
details = get_object_or_404(Good, pk= blog_id)
return render(request, 'detail.html', {'details':details,'all_objects':all_objects})
现在在模板中,您不需要使用 for 循环来获取详细信息,因为您正在尝试仅获取某个特定 id 的详细信息。
例如,您可以像这样获取该特定 id 的详细信息:
{% extends 'base.html' %}
{% block contents %}
<body>
<div class="container">
<h1>{{ details.title }}</h1>
<p>{{ details.pub_date }}</p>
<p>{{ details.body }}</p>
</div>
</body>
# To get all the objects in your template try this:
{% for object in all_objects %}
<p>{{object.title}}</p>
<p>{{obj.pub_date}}<.p>
{% endfor %}
{% endblock %}
推荐阅读
- javascript - 如何创建一个函数以便我可以控制组的大小?所以我可以选择每组是 2 人还是 3 人
- r - 在R中通过字符串匹配删除一行,无论它是否存在?
- angular - 在Angular的另一个异步函数中访问函数的结果值
- javascript - 如果通过条件,我如何返回 Json
- sql - 选择一组重复数据
- python - 尝试使用 buildozer 构建应用程序但返回错误,有人知道怎么了吗?
- python - 如何将字符串形式的字典列表与实际的字典列表相匹配?
- r - 使用 Case_when
- c - x86 程序集/C:尝试创建动态分配的数组时 SIGABRT 中止
- printing - Julia - 在解决最小化问题时抑制 Clp 优化器的输出