我对 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(...)).
添加回答
举报
0/150
提交
取消