首页 > 解决方案 > 单击时列表视图对象未重定向到详细视图

问题描述

我正在尝试创建一个博客,我可以通过基于类的列表视图在我的博客模型中显示对象列表。但是当尝试通过基于函数的详细视图单独显示它们时,我收到 404 错误。

(当前路径 blog/1 与其中任何一个都不匹配。)

我也尝试过基于班级的观点,但不幸的是没有成功..请看..

模型.py

         from django.db import models
         import datetime
        # Create your models here.
      
class BlogPost(models.Model):
title = models.CharField(max_length=500)
writer = models.CharField(max_length=150,default='my dept')
category =models.CharField(max_length=150)
image = models.ImageField(upload_to='images')
post   = models.TextField(max_length=2000)
Date  = models.DateField( default=datetime.date.today)


def __str__(self):
    return self.title

视图.py

    from django.views.generic import ListView , DetailView , UpdateView
    from.models import BlogPost

class BlogList(ListView):
model = BlogPost
template_name = 'blog/bloglist.html'
context_object_name = 'post'

def detailview(request, id=None): blg = get_object_or_404(BlogPost, id=id)

context = {'blg': blg,
           }

return render(request, 'blog/blogdetail.html', context)

网址.py

   from django.urls import path

       # importing views from views..py 
     from .views import  BlogList ,detailview

urlpatterns = [
path('list', BlogList.as_view(), name='list'),
path('(?P<id>\d+)/$', detailview, name='detail')

         ]

博客列表.html

                    <div class="post-body">
                        {% for p in posts %}
                        <a href="/blog/{{ p.id }}"><blockquote>{{p}}</br></br>{{p.Date}}</blockquote> 
                           </a>

                        {% endfor %}

标签: pythondjango

解决方案


您使用了错误的函数语法。path(...)它应该是

from django.urls import path
from .views import BlogList, detailview

urlpatterns = [
    path('list', BlogList.as_view(), name='list'),
    path('<int:pk>/', detailview, name='detail')
        ^^^^^^^^^^^^^

]

推荐阅读