Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于Django类的视图:将附加信息传递给下一个视图_Python_Django_Django Views - Fatal编程技术网

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

Python 基于Django类的视图:将附加信息传递给下一个视图,python,django,django-views,Python,Django,Django Views,我是Django的新手,对文档有点不知所措。我认为我的问题很简单,但我发现的一切让我更加困惑 我正在使用一个模型新闻项构建一个小新闻应用程序: 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

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

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

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,)))
还有一个像这样的

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'),
]
从django.url导入路径
从…起导入视图
URL模式=[
路径(“”,views.IndexView.as_view(),name='index'),
路径('/',views.DetailView.as_view(),name='detail'),
路径('/publish',views.publish,name='publish'),
]
在详细视图中,我有一个链接Publish,它只触发函数views.Publish。该视图应重定向回详图视图。 我现在要做的是在发布视图重定向时,在详细视图中显示一条小消息(如文章成功发布)。但我不知道什么是好办法

我可以在publish视图中呈现细节模板,但它仍然会在URL中显示news/publish,而不是news/detail

提前感谢您的帮助

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

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