Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Записать пользовательский обработчик контекста. например.

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

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

{{ current_path }}

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

См:

Ответ 2

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

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'django.core.context_processors.request',
)

И в использовании шаблона:

{{ request.get_full_path }}

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

Ответ 3

В файле 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}}

Ответ 4

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

Итак, в схеме MTV (Model, Template, View) представление получает запрос и использует рендеринг шаблона для генерации ответа, передавая ему словарь или все локальные переменные (используя функцию 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():

Приложение/шаблон/page.html:

{{ currentUrl }}

Ответ 5

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

если вы используете 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/ приведет к /).

Ответ 6

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

{% if 'foo/bar/' in request.get_full_path %}