Django视图无法正确重定向

时间:2019-11-20 17:05:34

标签: django django-views django-urls

需要一些帮助,以将其重定向回我所在的页面,这是因为单击按钮类似于页面上的“赞”。

class ProjectDelayedView(RedirectView):
    def get_redirect_url(self, *args, **kwargs):
        slug = self.kwargs.get("slug")
        print(slug)
        obj = get_object_or_404(Project, slug=slug)
        if obj.delayed is False:
            obj.delayed = True
        else:
            obj.delayed = False
        obj.save()
        return 'http://127.0.0.1:8000/si/list/All/'

我已经将此重定向到google,因为我还不太清楚如何将其重定向到我网站上的页面。这也是我的网址页面:

rom django.urls import path

from project_portal.views import (
    ProjectCreateView,
    ProjectDelayedView,
    ProjectListView,
    project_update_view,
    search,
)

urlpatterns = [
    path('project-create/', ProjectCreateView.as_view(), name='project-create'),
    path('<slug:slug>/delayed/', ProjectDelayedView.as_view(), name='project-delay'),
    path('list/<area>/', ProjectListView.as_view(), name='project-list'),
    path('<slug:slug>/update/', project_update_view, name='project-update'),
    path('search/', search, name='search'),
]

我所遵循的教程说要使用get_absolute_url,但是我不确定它是如何工作的,尝试在文档中理解它很棘手,我假设get_absolute_url在模型中设置了一个硬编码的url。也许。除此之外,最终,它将重定向到一个DetailView,此按钮将位于该DetailView中。

更新:我现在已经开始工作了,但是正如您所看到的,get_redirect_url()的返回只是硬编码的,这只是为了使视图正常工作,我在文档中找不到任何内容应该返回,但是硬编码的网址不是很有用。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

在您的Project模型中,插入get_absolute_url方法

    def get_absolute_url(self):
        from django.urls import reverse
        return reverse('project-detail', args=[self.slug])

具有这样的详细视图:

class ProjectDetailView(DetailView):
    model = Project

path('project/<slug:slug>/', views.ProjectDetailView.as_view(), name='project-detail'),

最后是您的redirectview

class ProjectDelayedView(RedirectView):
    def get_redirect_url(self, *args, **kwargs):
        slug = self.kwargs.get("slug")
        print(slug)
        obj = get_object_or_404(Project, slug=slug)
        if obj.delayed is False:
            obj.delayed = True
        else:
           obj.delayed = False
        obj.save()
        return obj.get_absolute_url()
相关问题