Skip to main content
 首页 » 编程设计

python之在 Django 上创建博客之URL 无法合作

2025年05月04日27zhujiabin

系统信息:使用 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):