Django: получить URL текущей страницы, включая параметры, в шаблоне - PullRequest
54 голосов
/ 14 июля 2010

Есть ли способ получить URL текущей страницы и все ее параметры в шаблоне Django?

Например, тег шаблона, который будет печатать полный URL-адрес, например /foo/bar?param=1&baz=2

Ответы [ 6 ]

68 голосов
/ 14 июля 2010

Написать пользовательский контекстный процессор. например,

def get_current_path(request):
    return {
       'current_path': request.get_full_path()
     }

добавьте путь к этой функции в переменной TEMPLATE_CONTEXT_PROCESSORS settings и используйте его в своем шаблоне следующим образом:

{{ current_path }}

Если вы хотите иметь полный request объект в каждом запросе, вы можете использовать встроенный контекстный процессор django.core.context_processors.request, а затем использовать {{ request.get_full_path }} в своем шаблоне.

См:

22 голосов
/ 25 января 2014

Используйте встроенный процессор контекста Django, чтобы получить запрос в контексте шаблона. В настройках добавить request процессор к TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'django.core.context_processors.request',
)

А в шаблоне используйте:

{{ request.get_full_path }}

Таким образом, вам не нужно самостоятельно писать новый код.

7 голосов
/ 14 июля 2010

В файле context_processors.py (или подобном):

def myurl( request ):
  return { 'myurlx': request.get_full_path() }

В settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
  ...
  wherever_it_is.context_processors.myurl,
  ...

В вашем template.html:

myurl={{myurlx}}
1 голос
/ 19 мая 2017

Вы можете увидеть, отличается ли ваш URL от других.

{% if 'foo/bar/' in request.get_full_path %}
1 голос
/ 19 января 2014

В дополнение к ответу Сдолана:

если вы используете I18N и хотите передать значение next в /i18n/setlang/, чтобы изменить язык текущей страницы, то вам нужно будет убрать код текущего языка из полного пути или. Что-то вроде:

full_path = request.get_full_path()
current_path = full_path[full_path.index('/', 1):]

Это предполагает, что каждый путь имеет формат /LANG_CODE/any/other/stuff/with/?param='yay' и просто запускает LANG_CODE, каким бы он ни был (например, /en/ приведет к /).

1 голос
/ 30 ноября 2011

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

Итак, в схеме MTV (Model, Template,Представление) представление получает запрос и использует шаблон рендеринга для генерации ответа, передавая ему словарь или все локальные переменные (используя функцию locals ()) этого представления.Зная это, мы можем вставить текущий URL-адрес, полученный из ответа, например:

views.py:

from django.shortcuts import render

def page(request):
    currentUrl = request.get_full_path()
    return render(request, 'app/page.html', locals())

Затем в шаблоне app / page.html выпросто нужно сделать следующее, чтобы отобразить переменную currentUrl, которую мы только что создали и передали через locals ():

app / template / page.html:

{{ currentUrl }}
...