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

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

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

编写自定义的上下文处理器 例如

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

TEMPLATE_CONTEXT_PROCESSORS设置variables中为该函数添加一个path,然后在模板中使用它,如下所示:

 {{ current_path }} 

如果您希望在每个请求中都有完整的request对象,则可以使用内置的django.core.context_processors.request上下文处理器,然后在模板中使用{{ request.get_full_path }}

看到:

  • 自定义上下文处理器
  • HTTPRequest的get_full_path()方法。

在上下文处理器中使用Django的构build来获取模板上下文中的请求。 在设置中添加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模式(模型,模板,视图)中,视图接收到一个请求并使用一个模板渲染来生成一个响应,传递一个字典或所有局部variables(使用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”中,您只需执行以下操作即可显示刚创build并通过locals()传递的currentUrlvariables:

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

 {{ currentUrl }} 

除了sdolan的回答:

如果你正在使用I18N,并希望将next值传递给/i18n/setlang/来改变当前页面的语言,那么你将需要从完整的path中/i18n/setlang/当前的语言代码。 就像是:

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

这假定每个path的格式都是/LANG_CODE/any/other/stuff/with/?param='yay' ,无论它是什么(例如, /en/将导致/ ),都会将LANG_CODEclosures。

你可以看到,如果你的url与其他人不同。

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