需要一些帮助,以将其重定向回我所在的页面,这是因为单击按钮类似于页面上的“赞”。
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()的返回只是硬编码的,这只是为了使视图正常工作,我在文档中找不到任何内容应该返回,但是硬编码的网址不是很有用。
答案 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()