所以我想在Django中创建一个消息应用程序。有一个用于删除消息的视图。如果用户单击删除,它将仅隐藏消息。如果执行,它将消息“ hide”的布尔值字段更改为True。
我有两个不同的模板,收件箱和发件箱。我想要这些摊位的删除功能。但是要使用相同的视图。我只想检查请求是否来自发件箱,那么我将更改为to_hide。如果请求来自收件箱,我将更改frm_hide。但是我不知道如何在视图中捕获URL并限制它们执行其他功能。
class Msgs(models.Model):
to = models.ForeignKey(User, on_delete=models.CASCADE, related_name='to_user')
frm = models.ForeignKey(User, on_delete=models.CASCADE, related_name='from_user')
title = models.CharField(max_length = 255)
body = models.CharField(max_length=2000)
date = models.DateTimeField(auto_now=True)
to_hide = models.BooleanField(default=False)
frm_hide = models.BooleanField(default=False)
def __str__(self):
return f'{self.frm} to {self.to}: {self.title}'
## Delete/Hide View
@login_required
def deletemsg(request, msg_id):
msg = Msgs.objects.get(pk=msg_id)
msg.frm_hide = True
msg.save()
return redirect('/msgs/inbox/')
# inbox url: http://127.0.0.1:8000/msgs/inbox/
# outbox url: http://127.0.0.1:8000/msgs/outbox/
答案 0 :(得分:0)
在您的urls.py中,您可以提供变量对象view_type
urlpatterns = [
...
url(r'msgs/(?P<view_type>(inbox|outbox))/$', views.deletemsg),
]
然后您可以在视图中获取此参数
def deletemsg(request, view_type, msg_id):
msg = Msgs.objects.get(pk=msg_id)
# do what you want depends on view_type
if view_type == 'inbox':
msg.frm_hide = True
else:
msg.to_hide = True
msg.save()
return redirect('/msgs/inbox/')
答案 1 :(得分:0)
假设您的urls.py
urlpatterns = [
path('msg/<int:msg_id>/<str:msg_type>/', deletemsg, name='inbox-outbox)
]
在views.py
@login_required
def deletemsg(request, msg_id, msg_type):
msg = Msgs.objects.get(pk=msg_id)
if msg_type == 'inbox':
msg.frm_hide = True
return redirect('your-desired-url')
if msg_type == 'outbox':
msg.to_hide = True
return redirect('your-desired-url')
# use the following if you redirect to same page for either inbox/outbox. In this case don't use the above two return statement
# return redirect('your-desired-url')
raise Http404 # import this before use