猿问

基于 Django 类的视图:将附加信息传递给下一个视图

我对 Django 很陌生,对文档有点不知所措。我认为我的问题很简单,但我发现的一切都让我更加困惑。


我正在使用模型 NewsItem 构建一个小新闻应用程序:


from django.db import models

from django.utils import timezone


# Create your models here.

class NewsItem(models.Model):

    title = models.CharField(max_length=50)

    newsText = models.TextField()

    dateEntered = models.DateTimeField('date entered')

    datePublished = models.DateTimeField('date published', blank=True, null=True)

    user = models.CharField(max_length=30) #temporary field. will be changed to user foreign key


    def __str__(self):

        return self.title

    def publish(self):

        if (self.datePublished == None):

            self.datePublished = timezone.now()

    def published(self):

        return self.datePublished != None

两个视图(技术上 3)索引和详细信息


from django.http import HttpResponseRedirect

from django.shortcuts import render, get_object_or_404

from django.urls import reverse

from django.views import generic


from .models import NewsItem


# Create your views here.

class IndexView(generic.ListView):

    template_name = 'news/index.html'

    context_object_name = 'latestNewsList'


    def get_queryset(self):

        return NewsItem.objects.order_by('-datePublished')[:5]

#todo

class DetailView(generic.DetailView):

    model = NewsItem

    template_name = 'news/detail.html'


def publish(request, itemId):

    newsItem = get_object_or_404(NewsItem, pk=itemId)

    newsItem.publish()

    newsItem.save()

    return HttpResponseRedirect(reverse('news:detail', args=(newsItem.id,)))

和这样的 urlconf


from django.urls import path

from . import views


urlpatterns = [

    path('', views.IndexView.as_view(), name='index'),

    path('<int:pk>/', views.DetailView.as_view(), name='detail'),

    path('<int:itemId>/publish', views.publish, name='publish'),

]

在详细视图中,我有一个链接发布,它只触发函数views.publish。该视图应该重定向回详细视图。我现在要做的是在发布视图重定向时在详细视图中显示一条小消息(如成功发布的文章)。但我不知道什么是好的方法


我可以在发布视图中呈现详细信息模板,但它仍然会在 URL 中显示新闻/发布而不是新闻/详细信息


在此先感谢您的帮助


肥皂起泡泡
浏览 144回答 1
1回答

守着星空守着你

看看消息框架。您可以在重定向之前添加一条成功消息,该消息将显示在下一页上。from django.shortcuts import redirectfrom django.contrib import messagesdef publish(request, itemId):&nbsp; &nbsp; newsItem = get_object_or_404(NewsItem, pk=itemId)&nbsp; &nbsp; newsItem.publish()&nbsp; &nbsp; newsItem.save()&nbsp; &nbsp; messages.success(request, "The post has been published")&nbsp; &nbsp; return redirect('news:detail', newsItem.id)请注意,我已经简化了return要使用的语句,redirect(...)而不是HttpResponseRedirect(reverse(...)).
随时随地看视频慕课网APP

相关分类

Python
我要回答