Есть ли способ узнать имя переменной, которое диспетчер URL передает для просмотра?

#python #django #url #dispatcher

#python #django #url #диспетчер

Вопрос:

я не знаю, возможно ли это, но я объясню, что я хочу попробовать!

Я создал контекстный процессор, который будет загружать некоторую пользовательскую информацию. В этом контекстном процессоре мне нужно знать, есть ли в списке vars переменная с именем «group», которая будет передана моему представлению, и если есть, я загружу больше вещей.

Процессор получает только объект ЗАПРОСА, и я думаю, что ТОЛЬКО это невозможно.

Но с помощью REQUEST_PATH (из запроса) я мог бы сотворить некоторую магию (с URL-адресами.py) и найдите точное представление и переменную, которые были выбраны django. Есть ли простой способ сделать это (или, может быть … способ? : D ) ?

—- решение —-

Решение (используя то, что говорит yasar11732) выглядит примерно так:

 x = resolve(request.META["PATH_INFO"])
if 'group_name' in x.kwargs
    do_domething()
  

Спасибо ! 🙂

Комментарии:

1. Не используйте has_key ; это устарело. Просто используйте if 'group_name' in x.kwargs

Ответ №1:

смотрите: разрешить() Это делает именно то, что вы пытаетесь сделать. Имейте в виду, что эта функция выдает исключение 404, если не находит совпадения, поэтому будьте готовы перехватить его.

Ответ №2:

Не могли бы вы просто добавить это выборочно для каждого просмотра? Тогда вы могли бы сделать что-то вроде этого:

 def group_processor(request):
    # ...

def some_view(request, user, group=None):
    # ...
    processors = [group_processor] if group else []
    context = RequestContext(request, {}, processors)
    return render_to_response("my_template.html", context_instance=context)