【问题标题】:Django class based view: passing additional information to the next view基于 Django 类的视图:将附加信息传递给下一个视图
【发布时间】:2020-01-22 15:52:07
【问题描述】:

我对 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 中显示新闻/发布而不是新闻/详细信息

提前感谢您的帮助

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

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

    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(...))

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2012-07-14
      • 2013-08-16
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多