Есть ли способ получить текущий URL страницы и все ее параметры в шаблоне Django?
Например, templatetag, который будет печатать полный URL, например /foo/bar?param=1&baz=2
Есть ли способ получить текущий URL страницы и все ее параметры в шаблоне Django?
Например, templatetag, который будет печатать полный URL, например /foo/bar?param=1&baz=2
Записать пользовательский обработчик контекста. например.
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 }}
в вашем шаблоне.
См:
Используйте конструкцию Django в обработчике контекста, чтобы получить запрос в контексте шаблона. В настройках добавьте request
процессор в TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
# Put your context processors here
'django.core.context_processors.request',
)
И в использовании шаблона:
{{ request.get_full_path }}
Таким образом, вам не нужно писать какой-либо новый код самостоятельно.
В файле 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}}
В 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 }}
В дополнение к ответу 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/
приведет к /
).
Вы можете видеть, отличается ли ваш URL от других.
{% if 'foo/bar/' in request.get_full_path %}