系统信息:使用 Sublime Text 3.1.1 和 Mac 10.14 Mojave 和 Django 版本 2.1.3
我正在用 Django for Python 创建一个博客。它有一个主页,然后是一个“帖子”页面,当您单击它时,它会列出已创建的帖子的标题。当我点击一篇文章的标题时,它应该会把我带到一个页面,上面有标题,然后是标题下面的文章文本。但是,这是我的项目停止工作的地方。我的网络浏览器出现错误:
TypeError at /posts/1/
post() got an unexpected keyword argument 'post_id'
Request Method: GET
我正在尝试使用一个数字作为与博客文章相对应的 url。因此,一篇博客文章位于 http://localhost:8000/posts/1/。 ,下一个在 http://localhost:8000/posts/2/等。让我向您展示我是如何尝试做到这一点的。
在我的 urls.py 中,我在“urlpatterns”列表中创建了以下路径:
path('posts/<int:post_id>/',views.post,name='post')
.据我了解,这应该将整数值存储为“post_id”。
我在“views.py”中对帖子的看法如下:
from django.shortcuts import render
from .models import BlogPost as Post
def post(request):
"""Show the text of a single blog post"""
post=Post.objects.get(id=post_id)
context = {'post':post}
return render(request,'blogs/post.html',context)
作为引用,我的“models.py”看起来像:(当然导入了适当的东西)
class BlogPost(models.Model):
"""A blog post"""
title=models.CharField(max_length=200)
text=models.TextField()
date_added=models.DateTimeField(auto_now_add=True)
def __str__(self):
"""Return a string representation of the model"""
return self.text
我的帖子模板源于一个非常基本的“base.html”,看起来像:
{% extends 'blogs/base.html' %}
{% block content %}
<p>{{ post.title }}</p>
<p>{{ post.text }}</p>
{% endblock content %}
</pre>
此模板也链接到我的模板“posts.html”:
{% extends "blogs/base.html" %}
{% block content %}
<p>Posts</p>
<ul>
{% for post in posts %}
<li>
<a href="{% url 'blogs:post' post.id %}">{{ post.title }}</a>
</li>
{% empty %}
<li>No posts have been submitted yet</li>
{% endfor %}
</ul>
{% endblock content %}
最重要的一行是带有“post.id”的那一行,因为那可能是我搞砸的地方。
我认为这个问题与不接受关键字参数有关,但我很难理解 Django 的错误消息。
最佳答案
因为您的网址格式有 <int:post_id>
, 你的函数定义必须接受 post_id
.将其更改为:
def post(request, post_id):
关于python - 在 Django 上创建博客 - URL 无法合作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53489082/