Django:在模板中获取当前页面的URL,包括参数

时间:2010-07-14 17:14:17

标签: django django-urls django-templates

有没有办法在Django模板中获取当前页面URL及其所有参数?

例如,可以打印完整网址的模板标签,例如/foo/bar?param=1&baz=2

7 个答案:

答案 0 :(得分:67)

编写自定义上下文处理器。 e.g。

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 }}

请参阅:

答案 1 :(得分:22)

在上下文处理器中使用Django的构建来获取模板上下文中的请求。在设置中,将request处理器添加到TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'django.core.context_processors.request',
)

在模板使用中:

{{ request.get_full_path }}

这样您就不需要自己编写任何新代码了。

答案 2 :(得分:7)

在文件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}}

答案 3 :(得分:1)

Django有很多内置的东西,但是如果你不明确你想要使用什么,就不会使用它。

因此,在MTV模式(模型,模板,视图)中,视图接收请求并使用模板渲染生成响应,并在其上传递此视图的字典或所有局部变量(使用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'中,您只需执行以下操作即可显示我们刚创建并通过locals()传递的currentUrl变量:

应用程序/模板/ page.html中:

{{ currentUrl }}

答案 4 :(得分:1)

除了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/将导致/)。

答案 5 :(得分:1)

您可以查看您的网址是否与其他网址不同。

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

答案 6 :(得分:1)

如果我们访问以下 URL:http://127.0.0.1:8000/home/?q=test

然后

request.path = '/home/'
request.get_full_path() = '/home/?q=test'
request.build_absolute_uri() = 'http://127.0.0.1:8000/home/?q=test'