django - Django NoReverseMatch:找不到带有参数'(1,)'的'blog_detail'的反向
问题描述
我创建了一个主题作为博客项目的类别。我将“主题”作为我的模型的 PK 通过以下路径成功访问:http: //127.0.0.1 :8000/django/1 和http://127.0.0.1:8000/IDE/2 django 和IDE是我模型的主题
from django.shortcuts import render, get_object_or_404
from .models import Blog, Topic
from django.views.generic import DetailView
def post_list(request, topic_slug=None):
topic= None
topics = Topic.objects.all()
blogs = Blog.objects.filter(available=True)
if topic_slug:
topic = get_object_or_404(Topic, slug=topic_slug)
blogs = blogs.filter(topic=topic)
return render(request,
'topiclist.html',
{'topics': topics,
'topic':topic,
'blogs': blogs,
})
class BlogDetail(DetailView):
model = Blog
template_name ='detail.html'
from django.urls import path
from . import views
from .views import BlogDetail
urlpatterns = [
path('<slug:topic_slug>/', views.post_list, name='post_list'),
path('<slug:topic_slug>/<int:pk>/', BlogDetail.as_view(), name='blog_detail'),
]
from django.db import models
from ckeditor.fields import RichTextField
from django.urls import reverse
class Topic(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, default='self.name', db_index=True, unique=True)
class Meta:
verbose_name = 'topic'
verbose_name_plural = 'topics'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('post:topiclist', args=[self.slug])
class Blog(models.Model):
title = models.CharField(max_length=50)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
content = RichTextField()
topic = models.ForeignKey(Topic, default=1, on_delete=models.SET_DEFAULT)
available = models.BooleanField(default=True)
class Meta:
verbose_name = 'post'
verbose_name_plural = 'posts'
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', args=[str(self.id)])
它显示错误
NoReverseMatch at /django/
Reverse for 'blog_detail' with arguments '(1,)' not found. 1 pattern(s) tried: ['(?P<topic_slug>[-a-zA-Z0-9_]+)/(?P<pk>[0-9]+)/$']
当我使用的 URL 配置时
blog_detail
My HTML template
{% block content %}
{% for blog in blogs %}
<a href="{% url 'blog_detail' blog.pk %}">{{ topic.title }}</a></li>
{% endfor %}
{% endblock content %}
它可以使用post_list
,但是当我使用blog_detail
它时会显示错误。有什么想法吗?我是 django 和编程的新手。非常感谢,如果有人可以提供帮助。我读了这个问题,但
没有找到没有参数的“blog_detail”的 Reverse 无济于事。尝试了 1 种模式:['blog/(?P<pk>[0-9]+)$']
解决方案
根据您的 urls.py 代码,该blog_detail
url 需要两个参数(主题 slug 和 pk),而您只提供了 pk。如果您同时传入两者,它应该可以工作(或重构 url,因此不需要主题 slug)。
{% url 'blog_detail' blog.topic.slug blog.pk %}
推荐阅读
- python - 如何在html标签的href属性中添加python代码
- google-sheets - 用于 Power Bi 报告时,Google 表格 - 发布到网络的安全性如何?
- file-upload - ngx 上传器无法在服务器上上传裁剪的图像 - 角度 6
- java - 安全 OAuth2 单点注销
- android - 如何逐个下载音频文件并显示进度
- unix - 查找文本文件中出现次数最多的单词
- java - Maven:首先使用容器依赖解决依赖关系
- r - 用字符串有条件地填充 R 中的 NA 值
- css - 最小宽度不适用于嵌套的 flexbox
- cassandra - 降级/回滚到 datastax cassandra 低版本的过程是什么?