python - 如何修复 NoReverseMatch at / Reverse for 'post_detail' with keyword arguments '{u'pk': ''}' not found。尝试了 1 种模式:['post//']
问题描述
我已经尝试了我在互联网上找到的与我的问题相似的所有内容,但没有帮助。如果你知道答案,请帮忙。
尝试设置博客的 post_detail 页面时出现错误。
错误消息:
Reverse for 'post_detail' with keyword arguments '{u'pk': ''}' not found.
1 pattern(s) tried: ['post/<int:pk>/']
我的 post_list.html
{% extends "blog/base.html" %}
{% load static %}
<html>
<head>
<title>Code Reminder</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
<link href="//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
</head>
<body>
<div class="page-header">
<h1><a href="/">Coder Reminder</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-4">
{% block content %}
{% for post in posts %}
<div class="post">
<div class="date">
{{ post.published_date }}
</div>
<h1><a href="{% url 'post_detail' pk=post.blog.pk %}">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endfor %}
{% endblock %}
</div>
</div>
</div>
</body>
</html>
我的 post_detail.html
{% extends "blog/base.html" %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h2>{{ post.title }}</h2>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endblock %}
我的 base.html
{% load static %}
<html>
<head>
<title>Code Reminder</title>
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
<link href="//fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
</head>
<body>
<div class="page-header">
<h1><a href="/">Code Reminder</a></h1>
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
{% block content %}
{% endblock %}
</div>
</div>
</div>
</body>
</html>
我的意见.py
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Create your views here.
from django.shortcuts import render
from django.utils import timezone
from .models import Post
from django.shortcuts import render, get_object_or_404
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, '/home/ud/PycharmProjects/blog/blog/blog/templates/blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, '/home/ud/PycharmProjects/blog/blog/blog/templates/blog/post_detail.html', {'post': post})
我的网址.py
from django.conf.urls import url
from . import views
urlpatterns = [
url('', views.post_list, name='post_list'),
url('post/<int:pk>/', views.post_detail, name='post_detail'),
]
最后是我的 myblog/urls.py
from django.conf.urls import url
from django.conf.urls import include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url('', include('blog.urls')),
]
如果你知道答案,请帮助我。我真的尝试了一切,但我无法找出我的错误。
问候
解决方案
错误消息说
Reverse for 'post_detail' with keyword arguments '{u'pk': ''}' not found.
这表明pk
正在评估空字符串''
。
您的网址标签是
{% url 'post_detail' pk=post.blog.pk %}
这意味着您正在尝试传递帖子的博客的 pk。但你几乎肯定想要帖子的 pk 代替:
{% url 'post_detail' pk=post.pk %}
其次,您使用的是旧url()
的path()
语法(Django 2.0 中的新功能)。你的网址应该是:
from django.urls import path
urlpatterns = [
path('', views.post_list, name='post_list'),
path('post/<int:pk>/', views.post_detail, name='post_detail'),
]
推荐阅读
- angular - 如何在 Ionic 4 中使用 Firebase 处理刷新令牌?
- e2e-testing - 赛普拉斯测试项目清单。没有收到任何物品时出错?
- javascript - 如何在 sweetalert 中采取两个选项并根据该选项采取行动?
- c++ - 如何使用 C++ 进行矩阵行和列命名?
- python - 两个列表给出相同值的列表的逻辑错误
- python-3.x - 如何绘制两个变量的分布?
- c++ - 哪个是处理虚拟析构函数的更好方法?
- moodle - 如何只向用户显示moodle测验而不输入moodle中的其他链接?
- vb.net - vb.net 中是否有替代的“电源”功能
- c++ - 出现错误:重新定义布尔队列
之前在这里声明过