【发布时间】:2020-12-11 14:08:28
【问题描述】:
我正在使用基于类的视图来创建帖子。单击帖子后,我使用 get_absolute_url 转到帖子页面,但它给出了没有反向匹配的错误。 这是我的模型间谍
from django.db import models
from django.conf import settings
from django.urls import reverse
# Create your models here.
class BlogPost(models.Model):
title = models.CharField(max_length = 50 , null=False,blank=False)
body = models.TextField(max_length = 5000 , null=False,blank=False)
date_published = models.DateTimeField(auto_now_add=True)
date_update = models.DateTimeField(auto_now_add=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('article-detail', args=(str(self.id)))
这是我的 urls.py:
urlpatterns = [
path('',views.home,name="home"),
path('home2/',HomeView.as_view(),name = "home2"),
path('article/<int:pk>',ArticleDetailView.as_view(),name = "article-detail"),
path('add_post/',AddPostView.as_view(),name="add_post"),
]
这是 home2.html:
<ul>
{%for post in object_list %}
<li><a href="{%url 'post:article-detail' post.pk %}">{{post.title}}</a>-{{post.author}}<br/>
{{post.body}}</li>
{%endfor%}
</ul>
这是views.py:
from django.shortcuts import render
from .models import *
from .forms import *
from django.views.generic import ListView,CreateView
from django.views.generic.detail import DetailView
# Create your views here.
def home(request):
return render(request,'post/home.html')
class HomeView(ListView):
model = BlogPost
template_name = "post/home2.html"
class ArticleDetailView(DetailView):
model = BlogPost
template_name = "post/article_details.html"
context_object_name = 'post'
class AddPostView(CreateView):
model = BlogPost
template_name = "post/add_post.html"
fields = '__all__'
【问题讨论】:
-
{% url 'post:article-detail' post.pk %}请改成{%url 'post:article-detail' request pk=post.pk %}是我的建议 -
我认为
get_absolute_url中的args应该是一个元组而不是一个集合。尝试这个。return reverse('article-detail', args=(str(self.id)),)或return reverse('article-detail', args=[str(self.id))]
标签: django django-models django-forms django-templates django-class-based-views