首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >get_absolute_url:找不到“文章详细信息”的反向错误

get_absolute_url:找不到“文章详细信息”的反向错误
EN

Stack Overflow用户
提问于 2020-08-22 11:19:17
回答 2查看 838关注 0票数 0

我使用基于类的视图来创建一个帖子。我已经使用get_absolute_url在点击post后转到post页面,但是它提供了一个没有反向匹配的错误。这是我的模型间谍

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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"),
      ]

这是this 2.html:

代码语言:javascript
运行
复制
  <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:

代码语言:javascript
运行
复制
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__'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-08-22 11:29:51

我建议你做些类似的事。我提供了两种方法。

第一方法:

通过使用get_absolute_url

代码语言:javascript
运行
复制
 from django.urls import reverse
 def get_absolute_url(self):
    return reverse('post:article-detail', args=(self.id)) #post is the app_name

urls.py

代码语言:javascript
运行
复制
url(r'^article/(?P<pk>\d+)/$', ArticleDetailView.as_view(), name='article-detail'),

home2.html 2.html

代码语言:javascript
运行
复制
<ul>
   {%for post in object_list %}
     <li>
        <a href="{{post.get_absolute_url}}">{{post.title}}</a>-{{post.author}}<br/>{{post.body}}
     </li>
   {%endfor%}
</ul>

第二种方法:

通过使用template tag.Here get absolute url,借助template tag

home2.html 2.html

代码语言:javascript
运行
复制
{% load templatehelpers %}
<ul>
{%for post in object_list %}
   <li>
      <a href="{% abs_url 'app_name:article-detail' request pk=post.pk %}">{{post.title}}</a>-{{post.author}}<br/>
     {{post.body}}
   </li>
{% endfor %}
</ul>

这里我们使用了一个新的简单标签,即templatehelpers.py (模板标记)中的abs_url (绝对url)。app_name是这个应用程序的名字。

templatehelpers.py

代码语言:javascript
运行
复制
from django import template
from django.urls import reverse
register = template.Library()

@register.simple_tag
def abs_url(value, request, **kwargs):
    return reverse(value,kwargs=kwargs)
票数 0
EN

Stack Overflow用户

发布于 2021-08-26 07:03:47

如果你改变这个

代码语言:javascript
运行
复制
def get_absolute_url(self):
         return reverse('article-detail', args=(str(self.id)))

到这个

代码语言:javascript
运行
复制
def get_absolute_url(self):
         return reverse('home')

您将不会得到错误,但您也不会被重定向到您刚刚发布的帖子。

因此,如果您的目标是消除这个错误,但不关心您后来被重定向到哪里,那么这就是您的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63535549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档