簡體   English   中英

Django 重定向,反向

[英]Django redirect, reverse

我該怎么做才能使編輯帖子后的用戶不會被重定向到主頁,而是重定向到他們剛剛編輯的帖子的詳細視圖

我的觀點.py

from . models import Post
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import DeleteView, UpdateView, CreateView
from django.urls import reverse_lazy

def home(request):
    posts = Post.objects.all()
    return render(request, 'pages/index.html', {'posts':posts})
    
def detail(request, slug):
    post = Post.objects.get(slug=slug)
    return render(request, 'pages/detail.html', {'post':post})
    
class edit(LoginRequiredMixin, UpdateView):
    model = Post
    template_name = 'pages/edit.html'
    fields = ['title','image','body']
    success_url = reverse_lazy('pages:homepage')
    
    def dispatch(self, request, *args, **kwargs):
        handler = super().dispatch(request, *args, **kwargs)
        user = request.user
        post = self.get_object()
        if post.author != user:
            raise PermissionDenied
        return handler

我的模型.py

from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.db.models.signals import pre_save
from A_Tech_Blog.utils import unique_slug_generator

class Post(models.Model):
    title = models.CharField(max_length=300)
    slug = models.SlugField(blank=True, null=True, max_length=300)
    image = models.ImageField(upload_to='post_images', default='default.jpg')
    time_created = models.DateTimeField(auto_now_add=True)
    views = models.IntegerField(default=0)
    body = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    def __str__(self):
        return f'{self.title} -- Author={str(self.author)}'
        
    class Meta:
        ordering = ['-time_created']
        verbose_name_plural = 'Posts'
        
    def get_absolute_url(self):
        return reverse('pages:detail', args=(self.slug))
        
        
def slug_generator(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)
        
pre_save.connect(slug_generator, sender=Post)

我希望能夠編輯帖子,然后被定向到帖子的詳細視圖,而不是被重定向到 web 應用程序主頁

您可以在視圖中覆蓋get_success_url()方法

像這樣的東西應該工作

class edit(LoginRequiredMixin, UpdateView):
    ...
    # success_url = reverse_lazy('pages:homepage')

    def get_success_url(self):
        return reverse('pages:detail', args=[self.slug])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM