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

标签 python django web

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

相关文章:

python - 如何通过 Django 后端将数据从 HDFS 发送到 Angular 5 前端?

bash - 如何编写脚本来打开 Safari 并打开多个指定的网站选项卡?

python - 使用掩码移动知道新坐标的 3D 数组的值

python - 线框在 numpy matplotlib mplot3d 中以错误的方式连接

django - 如何将 JSON 对象从 Django 传递给 FullCalendar(通过序列化模型)?

jquery - 使用 css 更改溢出(滚动条)的颜色(兼容所有浏览器)

linux - 为什么我的图片没有显示在我的网页上?

python - 尝试对组内玩家进行排名时,无法创建具有 PROTOCOL_TLS_SERVER 上下文的客户端套接字

python - 如何根据属性之间的差异对包含命名元组的列表进行排序?

html - 想要更改当前页面的标签图像