为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

肥皂起泡泡 2022-07-05 19:19:13
我对 Django 很陌生,对文档有点不知所措。我认为我的问题很简单,但我发现的一切都让我更加困惑。我正在使用模型 NewsItem 构建一个小新闻应用程序:from django.db import modelsfrom 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 HttpResponseRedirectfrom django.shortcuts import render, get_object_or_404from django.urls import reversefrom django.views import genericfrom .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]#todoclass 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,)))和这样的 urlconffrom django.urls import pathfrom . import viewsurlpatterns = [    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 中显示新闻/发布而不是新闻/详细信息在此先感谢您的帮助
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

看看消息框架。您可以在重定向之前添加一条成功消息,该消息将显示在下一页上。


from django.shortcuts import redirect

from django.contrib import messages



def publish(request, itemId):

    newsItem = get_object_or_404(NewsItem, pk=itemId)

    newsItem.publish()

    newsItem.save()

    messages.success(request, "The post has been published")

    return redirect('news:detail', newsItem.id)

请注意,我已经简化了return要使用的语句,redirect(...)而不是HttpResponseRedirect(reverse(...)).


查看完整回答
反对 回复 2022-07-05
  • 1 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信