Django NoReverseMatch:找不到参数“(1,)”的'blog_detail'反转
Django NoReverseMatch :Reverse for 'blog_detail' with arguments '(1,)' not found
我创建了一个主题作为博客项目的类别。
我将 'topic' 作为 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 和编程的新手。如果有人能提供帮助,非常感谢。我读了这个问题,但没有帮助
Reverse for 'blog_detail' with no arguments not found. 1 pattern(s) tried: ['blog/(?P<pk>[0-9]+)$']
根据您的 urls.py 代码,blog_detail
url 需要两个参数(主题 slug 和 pk),而您只提供了 pk。如果你同时传递两者,它应该可以工作(或者重构 url 所以不需要主题 slug)。
{% url 'blog_detail' blog.topic.slug blog.pk %}
我创建了一个主题作为博客项目的类别。 我将 'topic' 作为 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 和编程的新手。如果有人能提供帮助,非常感谢。我读了这个问题,但没有帮助
Reverse for 'blog_detail' with no arguments not found. 1 pattern(s) tried: ['blog/(?P<pk>[0-9]+)$']
根据您的 urls.py 代码,blog_detail
url 需要两个参数(主题 slug 和 pk),而您只提供了 pk。如果你同时传递两者,它应该可以工作(或者重构 url 所以不需要主题 slug)。
{% url 'blog_detail' blog.topic.slug blog.pk %}