【问题标题】:Django redirect, reverseDjango重定向,反向
【发布时间】:2020-12-17 10:45:09
【问题描述】:

我该怎么做才能使编辑帖子后的用户不会被重定向到主页,而是重定向到他们刚刚编辑的帖子的详细视图

我的意见.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

我的models.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)

我希望能够编辑帖子,然后被定向到帖子的详细视图,而不是被重定向到网络应用主页

【问题讨论】:

  • 覆盖 get_success_url 并将结果基于帖子。
  • 您确定您的表格有效吗?
  • 我的表格有效

标签: python django redirect


【解决方案1】:

您可以在视图中覆盖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])

【讨论】:

  • 我正在使用 slug 作为 url。会一样吗?
  • 是的。你没有给出你的网址,但如果你使用 slug,你可能会有类似 return reverse('pages:detail', args=[self.slug])
猜你喜欢
  • 2019-07-24
  • 2021-06-11
  • 2013-09-11
  • 2018-10-27
  • 1970-01-01
  • 2017-12-28
  • 2019-11-12
  • 2012-09-14
  • 2015-05-28
相关资源
最近更新 更多