LINUX.ORG.RU

Хитрый редирект

 , ,


0

1

Доброго времени суток, многоуважаемый ЛОР!

Перерыл чёртову докуху по джанге(а вы знаете, что я не особый любитель докух), но уже второй день не могу победить эту проблему. Ночами не сплю, близкие уже жаловаться начали, мол витаю в облаках и всё такое... Решил вот у сообщества помощи просить, хотя зарёкся сперва изучить докуху, но сроки поджимают, а я уже отчаялся найти решение(.

Суть проблемы такова, что нужно настроит правильный редирект при переходе по ссылке. Но как это сделать? Мне нужно редиректиться на my_path/my_node/n/, где n - натуральное число. Вот есть у меня страница, отображающаяся по адресу my_path/my_node/n/, на этой странице есть ссылка, см. шаблон. Как сделать, чтобы при отработке ссылки был редирект на my_path/my_node/n/? Следует учесть, что ссылка не влияет на путь(url), ибо он динамическией (меняется n).

Зачем это надо? Есть блог, в блоге есть сообщения (my_path/my_node/n/), для каждого из сообщения есть комменты, нужно сделать, чтобы при удалении коммента осуществлялся редирект на url данного сообщения (сообщения к которому был написан удалённых комментарий - my_path/my_node/n/.

views.py

def delete_comment ( request, id ):
    try:
        obj = Comment.objects.filter ( id = id ).update ( deleted = True )
    except Comment.DoesNotExist:
        raise Http404
    return redirect ( ?, request, "message_detail.html", obj )

urls.py:

url( r'^message/(?P<id>\d+)/', 'message_detail', name = "message_detail" ),
url (r'^delete_comment/(?P<id>\d+)/', 'delete_comment', name = "delete_comment"),

template:

{% if user.is_staff %}
        <a href="{% url delete_comment id=comment.id %}" class="close" >&times;</a>
{% endif %}

Заранее спасибо!

from django.shortcuts import redirect
return redirect('message_detail', comment.message.id)

Кстати, код в твоей вьюшке никогда не выбросит эксепшн Comment.DoesNotExist. Я уже даже не говорю, что модифицировать содержимое БД в GET-запросе - моветон.

provaton ★★★★★
()
Последнее исправление: provaton (всего исправлений: 1)
Ответ на: комментарий от baverman

Знаю, но что-то типа HttpResponseRedirect («/my_path/node/4/») - писать глупо, ибо что если это не 4, а 104. Мне нужен универсальный способ, «хитрый», оперирующий с id коммента и сообщения.

KernelPanic
() автор топика
Ответ на: комментарий от KernelPanic

facepalm. В твои треды я больше не захожу, это клиника.

baverman ★★★
()
Ответ на: комментарий от KernelPanic

у тебя есть объект коммента во вьюхе, у коммента есть id треда, ты знаешь куда делать редирект, reverse может принимать параметр

HttpResponseRedirect('/my/path/node/' + obj.parent.id)

как-то так. либо, ты даже можешь этот путь передавать во вьюху через request.path, или что-то типа того, давно не видел джанги

trashymichael ★★★
()
Последнее исправление: trashymichael (всего исправлений: 1)
Ответ на: комментарий от KernelPanic

В чём тут косяк...

Я лучше воздержусь от ответа.

provaton ★★★★★
()
Ответ на: комментарий от KernelPanic

Действительно, исключение не сработало(! В чём тут косяк...

DoesNotExist выбрасывается при get, а не при filter. Точнее, оно выбрасывается когда get не находит нужного объекта. А filter возвращает, если не ошибаюсь, пустой список.

risenshnobel ★★★
()

Если еще актуально, запили вот так:

from django.shortcuts import get_object_or_404

def delete_comment(request, id):
    # try:
       # obj = Comment.objects.filter ( id = id ).update ( deleted = True )
    # except Comment.DoesNotExist:
       # raise Http404
    obj = get_object_or_404(Comment, id=id)
    obj.delete()
    return redirect ('message_detail', id=id)

second_buddha
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.