如何在django中为单个帖子和URL创建详细信息视图?

问题描述 投票:0回答:2

我正在使用django 2.2中的博客应用程序创建一个网站。我对最后一步只有一个问题,那就是为单个帖子创建一个视图。不幸的是,我不知道如何完成。

我创建了最简单的视图,但是输入后,服务器发出500错误。

 def single_post(request):
     return render(request=request, template_name="posts/single_post.html")

这是我的模型,视图和网址:

models.py

# Post models
from django.db import models
from datetime import datetime
from django.utils.text import slugify

class Post(models.Model):
    title = models.CharField(max_length=150, verbose_name="Tytuł")
    content = models.TextField(verbose_name="Zawartość")
    lead = models.CharField(max_length=35, verbose_name="Skrót artykułu")
    published = models.DateTimeField(verbose_name="Data publikacji", default=datetime.now())
    slug = models.SlugField(unique=True)
    cover = models.ImageField(upload_to='images/')

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Post, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

urls.py

from django.contrib import admin
from django.urls import path, include
from . import views

app_name = "posts"

urlpatterns = [
    path("wpisy/", views.posts_list, name="posts_list"),]

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Post

# Create your views here.

def posts_list(request):
    return render(request=request, template_name="posts/posts_list.html", context={"posts": Post.objects.all})

def single_post(request):
    return render(request=request, template_name="posts/single_post.html")

我希望网站的访问者能够阅读全文。目前,我只能创建带有所有帖子及其快捷方式的整个页面。

python django
2个回答
2
投票

您需要为此传递帖子pk

def single_post(request,pk):
    post = Post.objects.get(pk=pk)
    return render(request=request, template_name="posts/single_post.html",{'post':post})

并且在模板中,您可以获得类似的详细信息

<p>{{post.title}}</p>

并且还将pk作为url参数传递,以获取URL中的详细信息

path('posts/<int:pk>',views.single_post,name='single_post')

0
投票

访问此页面以获取更多信息:https://docs.djangoproject.com/en/2.2/ref/class-based-views/generic-display/

from django.views.generic.detail import DetailView


class PostDetailView(DetailView):

    model = Post

网址:

from django.urls import path

from article.views import PostDetailView

urlpatterns = [
    path('<slug:slug>/', PostDetailView.as_view(), name='post-detail'),
]

示例模板页面:

<h1>{{ object.title}}</h1>
<p>{{ object.content }}</p>
© www.soinside.com 2019 - 2024. All rights reserved.