Как выполнить просмотр по-другому, если он идет с другого URL? - PullRequest
0 голосов
/ 03 июля 2019

Итак, я хочу создать приложение для сообщений в Django.Есть представление, которое используется для удаления сообщения.Это просто скрывает сообщение, если пользователь нажимает удалить.Он изменяет логическое поле сообщения «скрыть» на «Истина», если оно выполнено.

У меня есть два разных шаблона: Входящие и Исходящие.Я хочу, чтобы удалить функцию для стенда из них.Но хочу использовать тот же вид.Я просто хочу проверить, поступает ли запрос из папки «Исходящие», тогда я изменю на «скрыть».Если запрос поступает из папки «Входящие», я изменю 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/


Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Допустим, ваш 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
0 голосов
/ 03 июля 2019

В вашем 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/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...