Django 视图没有正确重定向
Django view not redirecting properly
需要一些帮助将其重定向回我所在的页面,它用于类似于页面上的“赞”的按钮点击。
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,因为我不太清楚如何将它重定向到我网站上的页面。这也是我的 url 页面:
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,该按钮将位于该位置。
更新:我现在已经开始工作了,但是如您所见,get_redirect_url() 中的 return 只是硬编码的,这只是为了让视图工作,我可以在文档中找不到任何关于应该 returned 的内容,但是硬编码的 url 不是很有用。
尝试这样的事情:
在您的项目模型中插入一个 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'),
最后在您的重定向视图中
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()
需要一些帮助将其重定向回我所在的页面,它用于类似于页面上的“赞”的按钮点击。
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,因为我不太清楚如何将它重定向到我网站上的页面。这也是我的 url 页面:
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,该按钮将位于该位置。
更新:我现在已经开始工作了,但是如您所见,get_redirect_url() 中的 return 只是硬编码的,这只是为了让视图工作,我可以在文档中找不到任何关于应该 returned 的内容,但是硬编码的 url 不是很有用。
尝试这样的事情:
在您的项目模型中插入一个 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'),
最后在您的重定向视图中
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()